什么是组合模式?(举例说明)

什么是组合模式?(举例说明)

内容导读

收集整理的这篇技术教程文章主要介绍了什么是组合模式?(举例说明),小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1858字,纯文字阅读大概需要3分钟

内容图文

组合模式 (Composite Pattern)

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

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

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

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

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

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

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

<?php//抽象士兵类interface soldier{public function fire();}//步兵 攻击力5class bubing implements soldier{public function fire(){return 5;}}//炮兵 攻击力8class paobing implements soldier{public function fire(){return 8;}}//特种兵 攻击力 12class 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->soldier as $v){$zhantouli += $v->fire();}echo "军队的战斗力: ".$zhantouli;}}$arm = new arm();$arm->add('bubing');$arm->add('paobing');$arm->show();$arm->delete('paobing');$arm->show();

以上就是什么是组合模式?(举例说明)的详细内容,更多请关注Gxl网其它相关文章!

内容总结

以上是为您收集整理的什么是组合模式?(举例说明)全部内容,希望文章能够帮你解决什么是组合模式?(举例说明)所遇到的程序开发问题。 如果觉得技术教程内容还不错,欢迎将网站推荐给程序员好友。

内容备注

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。


本文关键词:

联系我们

在线咨询:点击这里给我发消息

邮件:w420220301@qq.com