组合模式是什么-创新互联

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

成都创新互联是专业的网站建设公司,提供网站建设,网站制作,网站设计等网站开发一体化解决方案;包括H5开发,小程序制作,网站定制,企业网站建设,商城系统网站开发,自适应网站建设,建网站,PHP网站建设,软件开发,软文平台,网站营销。欢迎做网站的企业前来合作洽谈,成都创新互联将竭诚为您服务!

组合模式 (Composite Pattern)

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

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

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

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

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

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

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

<?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->soldier as $v){
$zhantouli += $v->fire();
}
echo "军队的战斗力: ".$zhantouli;
}
}
$arm = new arm();
$arm->add('bubing');
$arm->add('paobing');
$arm->show();
$arm->delete('paobing');
$arm->show();

看完了这篇文章,相信你对组合模式是什么有了一定的了解,想了解更多相关知识,欢迎关注创新互联成都网站设计公司行业资讯频道,感谢各位的阅读!

另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。

分享题目:组合模式是什么-创新互联
网页路径:https://www.cdcxhl.com/article20/epjco.html

成都网站建设公司_创新互联,为您提供手机网站建设网站导航自适应网站网站内链用户体验小程序开发

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联

成都app开发公司