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);