组合形式:许可客户将对象组合成树形构造来表现"团体/部份”条理构造。组合能让客户以一致的体式格局处置惩罚一般对象以及对象组合。
组合形式让我们能用树形体式格局建立对象的构造,树内里包括了组合以及一般的对象。运用组合构造,我们能把雷同的操纵应用在组合和一般对象上。换句话说,在大多数情况下,我们能够疏忽对象组合和一般对象之间的差异。
包括其他组件的组件为组合对象;不包括其他组件的组件为叶节点对象。
组合形式为了坚持”透明性“,常常会违背单一义务准绳。也就是说,它一方面要治理内部对象,另一方面要供应一套接见接口。
当组合形式接口里供应删除子节点的要领时,在组件里有一个指向父节点的指针的话,完成删除操纵会比较轻易。
以一个戎行的战役力盘算为例演示组合形式
戎行由步卒、炮兵、特种兵构成,他们都具有一个才能就是战役并具有各自的战役力。我们经由过程他们组合成一个戎行并完成战役力的盘算。
<?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();
以上就是什么是组合形式?(举例说明)的细致内容,更多请关注ki4网别的相干文章!