コンビネーションモードは、主に複数のオブジェクトをツリー構造に結合するために使用される構造設計モードであり、「パートトータル」の階層的な関係を表現します。これにより、クライアントは同じ方法で単一のオブジェクトと結合されたオブジェクトを処理し、コード構造を大幅に簡素化できます。この記事では、StarCraftを例として、コンビネーションモードのアプリケーションを詳細に示す例を示します。
スタークラフトでは、私たちの一般的なキャラクターには軍、兵士、タンクが含まれます。これらの役割の動作は、以下のPHPコードで定義されます。
abstract class Unit
{
abstract public function attack();
}
class Soldier extends Unit
{
public function attack()
{
echo "兵士の攻撃!";
}
}
class Tank extends Unit
{
public function attack()
{
echo "戦車攻撃!";
}
}
class Army extends Unit
{
private $units = [];
public function addUnit(Unit $unit)
{
$this->units[] = $unit;
}
public function attack()
{
foreach ($this->units as $unit) {
$unit->attack();
echo "";
}
}
}
陸軍(陸軍)は組み合わせのオブジェクトであり、兵士と戦車は葉のオブジェクトです。陸軍は複数の兵士と戦車を含むことができ、統一された方法で攻撃コマンドを発行することができます。
$army = new Army();
$army->addUnit(new Soldier());
$army->addUnit(new Soldier());
$army->addUnit(new Tank());
陸軍の攻撃方法を呼び出すことにより、すべてのメンバーに一度に攻撃するように命じることができます。
$army->attack();
実行結果は順番に出力されます。
兵士の攻撃!
兵士の攻撃!
戦車攻撃!
このようにして、コンビネーションモードにより、複雑なオブジェクト構造を統一された方法で管理できるようになり、コードの柔軟性と保守性が大幅に向上します。
コンビネーションモードは、木型のオブジェクト構造を構築することにより、単一のオブジェクトと組み合わせオブジェクトの処理を簡素化します。スタークラフトゲームの例では、陸軍とそのメンバーの統一された管理を成功裏に実装しました。コンビネーションモードは、コードをより明確にするだけでなく、複雑なシステム設計に優れたスケーラビリティを提供します。