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

xiaoxiao2021-02-27  191

//组合模式 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; } } //缺点所有子类都必须实现抽象的addremove方法,我们仅仅需要组合类拥有addremove方法 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();
转载请注明原文地址: https://www.6miu.com/read-11597.html

最新回复(0)