PHP设计模式
结构型模式(9)组合模式
组合模式:允许客户将对象组合成树形结构来表现"整体/部分”层次结构。组合能让客户以一致的方式处理个别对象以及对象组合。 组合模式让我们能用树形方式创建对象的结构,树里面包含了组合以及个别的对象。使用组合结构,我们能把相同的操作应用在组合和个别对象上。换句话说,在大多数情况下,我们可以忽略对象组合和个别对象之间的差别。 包含其他组件的组件为组合对象;不包含其他组件的组件为叶节点对象。 组合模式为了保持”透明性“,常常会违反单一责任原则。也就是说,它一方面要管理内部对象,另一方面要提供一套访问接口。 当组合模式接口里提供删除子节点的方法时,在组件里有一个指向父节点的指针的话,实现删除操作会比较容易。 以一个军队的战斗力计算为例演示组合模式 军队由步兵、炮兵、特种兵组成,他们都具备一个能力就是战斗并具备各自的战斗力。我们通过他们组合成一个军队并完成战斗力的计算 ```php <?php //抽象士兵类 interface soldier{ public function fire(); } //步兵 攻击力5 class bubing implements soldier{ public function fire(){ return 5; } } //炮兵 攻击力8 class paobing implements soldier{ public function fire(){ return 8; } } //特种兵 攻击力 12 class tezhongbing implements soldier{ public function fire(){ return 12; } } //军队类实现兵种的组合 class arm{ //存储作战兵种的数组 private $soldier = array(); //添加作战兵种 public function add($soldierType){ //获取对应的兵种对象 soldier=new soldierType(); //保存进数组利用数组的键记录兵种 便于删除 this?>soldier[soldierType] = $soldier; } //删除兵种 public function delete($soldierType){ if(isset(this?>soldier[soldierType])){ unset(this?>soldier[soldierType]); } } //计算并输出战斗能力 public function show(){ $zhantouli = 0; foreach(this?>soldierasv){ zhantouli+=v->fire(); } echo "军队的战斗力: ".$zhantouli; } } $arm = new arm(); $arm->add('bubing'); $arm->add('paobing'); $arm->show(); $arm->delete('paobing'); $arm->show(); ```
顶部
收展
底部
[TOC]
目录
PHP设计模式概述
设计模式之开闭原则
设计模式之里氏代换原则
设计模式之接口隔离原则
创建型模式(1)单例模式
创建型模式(2)工厂模式
创建型模式(3)抽象工厂模式
创建型模式(4)原型模式
创建型模式(5)建造者模式
结构型模式(6)委托代理模式
结构型模式(7)装饰模式
结构型模式(8)外观模式
结构型模式(9)组合模式
结构型模式(10)适配器模式
结构型模式(11)桥接模式
结构型模式(12)享元模式
行为型模式(13)策略模式
行为型模式(14)解释器模式
行为型模式(15)观察者模式
行为型模式(16)模板方法模式
行为型模式(17)迭代器模式
行为型模式(18)命令模式
行为型模式(19)备忘录模式
行为型模式(20)状态模式
行为型模式(21)访问者模式
行为型模式(22)中介者模式
行为型模式(23)责任链模式
相关推荐
PHP基础
PHP函数
PHP算法
PHP版本