PHP設計模式之組合模式定義與應用示例
阿新 • • 發佈:2020-02-03
本文例項講述了PHP設計模式之組合模式定義與應用。分享給大家供大家參考,具體如下:
<?php /** * 組合模式 * * 將物件組合成樹形結構以表示"部分-整體"的層次結構,使得客戶對單個物件和複合物件的使用具有一致性 */ abstract class MenuComponent { public function add($component) { } public function remove($component) { } public function getName() { } public function getUrl() { } public function display() { } } class Menu extends MenuComponent { private $_items = array(); private $_name = null; public function __construct($name) { $this->_name = $name; } public function add($component) { $this->_items[] = $component; } public function remove($component) { $key = array_search($component,$this->_items); if ($key !== false) unset($this->_items[$key]); } public function display() { echo "-- " . $this->_name . " --------- \r\n "; foreach ($this->_items as $item) { $item->display(); } } } class Item extends MenuComponent { private $_name = null; private $_url = null; public function __construct($name,$url) { $this->_name = $name; $this->_url = $url; } public function display() { echo $this->_name . "#" . $this->_url . " \r\n "; } } class Client { private $_menu = null; public function __construct($menu) { $this->_menu = $menu; } public function setMenu($menu) { $this->_menu = $menu; } public function displayMenu() { $this->_menu->display(); } } // 例項一下 // 人 $item3 = new Item("baidu","www.baidu.com"); $item4 = new Item("google","www.google.com"); $item1 = new Item("163","www.163.com"); $item2 = new Item("sina","www.sina.com"); // 班級 $subMenu1 = new Menu("sub menu1"); $subMenu1->add($item1); $subMenu1->add($item2); $subMenu2 = new Menu("sub menu2"); $subMenu2->add($item3); $subMenu2->add($item4); $subMenu3 = new Menu("sub menu3"); $subMenu3->add($item3); $subMenu3->add($item4); // 所有班級 $allMenu = new Menu("All Menu"); $allMenu->add($subMenu1); $allMenu->add($subMenu2); $allMenu->add($subMenu3); // 列印所有班級 $objClient = new Client($allMenu); $objClient->displayMenu(); // 列印第2 班級 $objClient->setMenu($subMenu2); $objClient->displayMenu(); ?>
執行結果:
-- All Menu ---------
-- sub menu1 ---------
163#www.163.com
sina#www.sina.com
-- sub menu2 ---------
baidu#www.baidu.com
google#www.google.com
-- sub menu3 ---------
baidu#www.baidu.com
google#www.google.com
-- sub menu2 ---------
baidu#www.baidu.com
google#www.google.com
更多關於PHP相關內容感興趣的讀者可檢視本站專題:《php面向物件程式設計入門教程》、《PHP陣列(Array)操作技巧大全》、《PHP基本語法入門教程》、《PHP運算與運算子用法總結》、《php字串(string)用法總結》、《php+mysql資料庫操作入門教程》及《php常見資料庫操作技巧彙總》
希望本文所述對大家PHP程式設計有所幫助。