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();
相关文章推荐
- php设计模式 Composite (组合模式)
- PHP草根论之设计 模式-组合模式
- 初识PHP设计模式--组合模式
- PHP设计模式之组合(Composite)模式
- PHP设计模式之组合模式
- 设计模式之组合模式与PHP案例
- 深入理解PHP:高级技巧、面向对象与核心技术(原书第3版) -- 设计模式之组合模式
- PHP设计模式19-组合模式
- PHP设计模式——组合模式
- php 3种基本设计模式的组合使用
- php设计模式 Composite (组合模式)
- [php]php设计模式 Composite (组合模式)
- php实现设计模式之 组合模式
- php设计模式之--组合模式
- 组合模式 - 设计模式 - PHP版
- PHP设计模式之组合模式
- PHP设计模式系列(十四):组合模式
- PHP设计模式之组合模式
- 16. 星际争霸之php设计模式--组合模式
- Php设计模式之【组合模式Composite Pattern】