Reading:オブ脳本(3)Compositeパターン(PHP5編)

引き続き、PHPでサンプル書いてみまする。

今回はCompositeパターンの例です。とりあえずPHP5だけ。PHP5いいわあ(4と比較してだけど…)

実行結果

$ php -f Manager.php
製造事業部
-------------------
システム部
-------------------
吉田さん
平井さん

営業部
-------------------
佐藤さん
田中さん

Party.php

<?php
interface Party
{
    public function display();
}

User.php

<?php
class User implements Party
{
    private $_name;

    public function __construct($name)
    {
        $this->_name = $name;
    }
    public function display()
    {
        echo $this->_name . "\n";
    }
}

Bumon.php

<?php
class Bumon implements Party
{
    private $_parties = array();
    private $_name;

    public function __construct($name)
    {
        $this->_name = $name;
    }
    public function addParty($party)
    {
        $this->_parties[] = $party;
    }
    public function display()
    {
        echo $this->_name . "\n";
        echo "-------------------\n";
        foreach ($this->_parties as $party) {
            $party->display();
        }
        echo "\n";
    }
}

Manager.php

<?php
function __autoload($className) {
    require $className . '.php';
}

class Manager
{
    public function main($argv)
    {
        // サンプルデータを作成
        $yoshida = new User('吉田さん');
        $hirai = new User('平井さん');
        $systemBumon = new Bumon('システム部');
        $systemBumon->addParty($yoshida);
        $systemBumon->addParty($hirai);
        $sato = new User('佐藤さん');
        $tanaka = new User('田中さん');
        $eigyoBumon = new Bumon('営業部');
        $eigyoBumon->addParty($sato);
        $eigyoBumon->addParty($tanaka);
        $jigyoubu = new Bumon('製造事業部');
        $jigyoubu->addParty($systemBumon);
        $jigyoubu->addParty($eigyoBumon);

        // 表示ロジック
        $jigyoubu->display();
    }
}

$manager = new Manager();
$manager->main($argv);