您的位置:首页 > 编程语言 > PHP开发

php 设计模式(组合模式一)

2017-07-10 07:46 519 查看
//组合模式
abstract class Unit{
abstract function addUnit(Unit $unit);
abstract function removeUnit(Unit $unit);
abstract function bombardStrength();
}
class Army extends Unit{
public $unit = [];
public function addUnit(Unit $unit){

if(in_array($unit, $this->unit,true)){
return;
}
$this->unit[] = $unit;
}
public function removeUnit(Unit $unit){
$this->unit = array_udiff($this->unit, [$unit], function($a,$b){
if ($a===$b)
{
return 0;
}
return ($a>$b)?1:-1;
});
}
public function bombardStrength()
{
$ret = 0;
foreach($this->unit as $unit){
$ret += $unit->bombardStrength();
}
return $ret;
}
}
//缺点所有子类都必须实现抽象的add和remove方法,我们仅仅需要组合类拥有add和remove方法
class Archer extends Unit{
public function addUnit(Unit $unit)
{
// TODO: Implement addUnit() method.
}
public function removeUnit(Unit $unit)
{
// TODO: Implement removeUnit() method.
}
public function bombardStrength()
{
return 4;
}
}
class   Brcher extends Unit{
public function addUnit(Unit $unit)
{
// TODO: Implement addUnit() method.
}
public function removeUnit(Unit $unit)
{
// TODO: Implement removeUnit() method.
}
public function bombardStrength()
{
return 2;
}
}

$ar = new Army();
$a = new Archer();
$b = new Brcher();
$ar->addUnit($a);
$ar->addUnit($b);
print_r($ar->unit);
$ar->removeUnit($b);
print_r($ar->unit);
echo $ar->bombardStrength();
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: