组合模式是什么

  介绍

小编给大家分享一下组合模式是什么,希望大家阅读完这篇文章后大所收获、下面让我们一起去探讨吧!

<强>组合模式(复合模式)

<强>组合模式:允许客户将对象组合成树形结构来表现“整体/部分“层次结构。组合能让客户以一致的方式处理个别对象以及对象组合。

组合模式让我们能用树形方式创建对象的结构,树里面包含了组合以及个别的对象。使用组合结构,我们能把相同的操作应用在组合和个别对象上。换句话说,在大多数情况下,我们可以忽略对象组合和个别对象之间的差别。

包含其他组件的组件为组合对象,不包含其他组件的组件为叶节点对象。

组合模式为了保持“透明性”,常常会违反单一责任原则。也就是说,它一方面要管理内部对象,另一方面要提供一套访问接口。

当组合模式接口里提供删除子节点的方法时,在组件里有一个指向父节点的指针的话,实现删除操作会比较容易。

<强>以一个军队的战斗力计算为例演示组合模式

军队由步兵,炮兵,特种兵组成,他们都具备一个能力就是战斗并具备各自的战斗力。我们通过他们组合成一个军队并完成战斗力的计算。

& lt; ? php//抽象士兵类   接口士兵{   公共函数火();   }//步兵攻击力5   类小家伙实现士兵{   公共函数火(){   返回5;   }   }//炮兵攻击力8   类paobing实现士兵{   公共函数火(){   返回8;   }   }//特种兵攻击力12   类tezhongbing实现士兵{   公共函数火(){   返回12;   }   }//军队类实现兵种的组合   类的手臂{//存储作战兵种的数组   私人数组$士兵=();//添加作战兵种   公共函数添加(soldierType美元){//获取对应的兵种对象   士兵=new soldierType美元();//保存进数组利用数组的键记录兵种便于删除   $ this→士兵(soldierType美元)=$士兵;   }//删除兵种   公共函数删除(soldierType美元){   如果(收取($ this→士兵[$ soldierType])) {   设置($ this→士兵[$ soldierType]);   }   }//计算并输出战斗能力   公共函数显示(){   美元zhantouli=0;   foreach ($ this→士兵美元v) {   zhantouli +=v→美元火();   }   回声“军队的战斗力:“zhantouli美元;   }   }   手臂美元=new手臂();   美元的手臂→添加(& # 39;bubing& # 39;);   美元的手臂→添加(& # 39;paobing& # 39;);   美元的手臂→显示();   美元的手臂→删除(& # 39;paobing& # 39;);   手臂→美元显示();

组合模式是什么