PHP組合模式第一種實現方式
<?php// 組合模式function echoLine($msg) {echo $smg, '<br/>';}interface Component{public function doAction();}/** * 局部類 */class Leaf implements Component{public function doAction(){echoLine('The [leaf] doAction!');}}/** * 組合模式的一個問題是如何? add 和 remove 方法。一般的組合模式會在抽象超類中添加 add * 和 remove 方法。這可以確保模式中的所有類都共用同一個借口,但這同時也意味著局部類也必須 * 實現這些方法。實際上,我們並不希望在局部類中實現這些方法。 * * 需要擔心的問題: * 1. 組合操作的成本。 * 2. 對象持久化問題。難以直接將資料儲存在關係型資料中,但其資料卻非常適合持久化為 XML。 */class Composite implements Component{/** * component container */private $container = array();public function doAction(){echoLine('The [Composite] doAction!');foreach ($this->container as $c)$c->doAction();}/** * add component * @param Component $c */public function addComponent(Component $c){if(!in_array($c, $this->container, true))$this->container[] = $c;}/** * remove conponent * @param Component $c */public function removeComponent(Component $c){$this->container = array_diff($this->container, array($c));}/** * get all components * @return array */public function getComponents(){return $this->container;}}// test code$leaf = new Leaf();$composite = new Composite();$composite->addComponent($leaf);$composite->addComponent(new Leaf());$composite->addComponent(new Leaf());$composite->doAction();