PHP设计模式之组合模式
来源:互联网 发布:控制仿真类软件 编辑:程序博客网 时间:2024/06/03 21:19
本文知识来源于:《深入PHP面向对象、模式和实践》一书
参考资料:设计模式(七)组合模式Composite(结构型)
典型的组合模式结构图:
例子:
例如一个军队,军队可以添加士兵,添加其他军队。军队可以计算自己的总战斗力,每个士兵也有自己的战斗力,那么这可以实现一个同名的方法,军队和士兵各自重写这个方法的具体实现,这样在统计的过程中,直接调用该方法,就可以计算总战斗力。
代码如下:
<?php/*Title:组合模式Detail:军队与士兵的组合模型class:Army,军队;Archer,士兵;Unit,基本单元*///异常class UnitException extends Exception{}//基本单元abstract class Unit{//攻击力总和abstract function bombardStrength();//添加单元function addUnit(Unit $unit){throw new UnitException(get_class($this)."is a leaf");}//移除单元function removeUnit(Unit $unit){throw new UnitException(get_class($this)."is a leaf");}} //士兵类class Archer extends Unit{function bombardStrength(){return 4;}}//军队类class Army extends Unit{private $units=array();function addUnit(Unit $unit){if(in_array($unit,$this->units,true)){return;}$this->units[]=$unit;}function removeUnit(Unit $unit){$this->units=array_diff($this->units,array($unit),function($a,$b){return ($a===$b)?0:1;});}function bombardStrength(){$ret=0;foreach ($this->units as $k => $v) {$ret+=$v->bombardStrength();}return $ret;}}$main_army=new Army();$main_army->addUnit(new Archer());$main_army->addUnit(new Archer());$sub_army=new Army();$sub_army->addUnit(new Archer());$sub_army->addUnit(new Archer());$sub_army->addUnit(new Archer());$main_army->addUnit($sub_army);print_r($main_army);/*输出:Army Object( [units:Army:private] => Array ( [0] => Archer Object ( ) [1] => Archer Object ( ) [2] => Army Object ( [units:Army:private] => Array ( [0] => Archer Object ( ) [1] => Archer Object ( ) [2] => Archer Object ( ) ) ) ))*/echo '<br />';echo $main_army->bombardStrength();//输出:20
0 0
- PHP设计模式之组合模式
- [php] 设计模式之 组合模式
- PHP:设计模式之组合模式
- PHP设计模式之组合模式
- Php设计模式之【组合模式Composite Pattern】
- PHP草根论之设计 模式-组合模式
- 设计模式之组合模式
- 设计模式之组合模式
- 设计模式之组合模式
- 设计模式之--组合模式
- 设计模式之组合模式
- 设计模式之组合模式
- 设计模式之组合模式
- 设计模式之组合模式
- 设计模式之---组合模式
- 设计模式之组合模式
- 设计模式之组合模式
- 设计模式之-------------组合模式
- 高斯-塞得尔迭代法
- [转]svn: E200030: sqlite[S11]: database disk image is malformed
- AngularJS 从入门到精通(过滤器(Filter) )
- 2013阿里巴巴安全工程师笔试试题_复习使用
- 分享干货 码农必备各种API20
- PHP设计模式之组合模式
- HDU 1814 Peaceful Commission (2-SAT)
- 统计学方法与数据分析学习笔记1
- gdb调试命令
- java序列化的机制和原理
- Java中super的使用
- 输入日期及提醒事件并输出
- House Robber II
- Communication System(dp)