組み合わせパターンは構造パターンに属します
概要: オブジェクトをツリー構造に結合して、「部分全体」の階層を表します。合成パターンにより、ユーザーは単一オブジェクトと複合オブジェクトを一貫して使用できるようになります。
合成と集約はどちらも、クラスが他のクラスの 1 つ以上のインスタンスを長期間保持する状況を表します。
集約: 含まれるオブジェクトはコンテナの中核部分ですが、他のオブジェクトに含まれることもあります。集約関係は、白抜きのひし形で始まる線で示されています。
構成: 含まれるオブジェクトは、そのコンテナーによってのみ参照できます。コンテナを削除する場合は、コンテナも削除する必要があります。結合関係のダイヤモンドはしっかりしています
/**
* 実行部隊
*/
抽象クラス Unit{
public function BombardStrength();
}
/ * *
* アーチャー
*/
class ArcherUnit extends Unit{
public function BombardStrength(){
return 4;
}
}
/**
* レーザーキャノン
*/
class LaserCannonUnit extends Unit{
public function BombardStrength(){
return 10;
}
}
/**
* 陸軍
*/
class Arm{
private $単位 = array();
private $strength = 0;
public function addUnit(Unit $unit){
array_push($this->units, $unit);
}
public function BombardStrength() {
foreach ($this->単位を $unit として){
$this->strength += $unit->bombardStrength();
}
}
}
/**
* コンビネーションモード
*/
public function actionCombine(){
$archer = new ArcherUnit;
$laserCannon = new LaserCannonUnit;
$arm = new Arm;
$arm->addUnit ( $archer);
$arm->addUnit($laserCannon);
echo $arm->bombardStrength();
}