PHP設(shè)計(jì)模式之組合模式定義與應(yīng)用示例
本文實(shí)例講述了PHP設(shè)計(jì)模式之組合模式定義與應(yīng)用。分享給大家供大家參考,具體如下:
<?php /** * 組合模式 * * 將對(duì)象組合成樹(shù)形結(jié)構(gòu)以表示"部分-整體"的層次結(jié)構(gòu),使得客戶(hù)對(duì)單個(gè)對(duì)象和復(fù)合對(duì)象的使用具有一致性 */ 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(); } } // 實(shí)例一下 // 人 $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"); // 班級(jí) $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); // 所有班級(jí) $allMenu = new Menu("All Menu"); $allMenu->add($subMenu1); $allMenu->add($subMenu2); $allMenu->add($subMenu3); // 打印所有班級(jí) $objClient = new Client($allMenu); $objClient->displayMenu(); // 打印第2 班級(jí) $objClient->setMenu($subMenu2); $objClient->displayMenu(); ?>
運(yùn)行結(jié)果:
-- 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
更多關(guān)于PHP相關(guān)內(nèi)容感興趣的讀者可查看本站專(zhuān)題:《php面向?qū)ο蟪绦蛟O(shè)計(jì)入門(mén)教程》、《PHP數(shù)組(Array)操作技巧大全》、《PHP基本語(yǔ)法入門(mén)教程》、《PHP運(yùn)算與運(yùn)算符用法總結(jié)》、《php字符串(string)用法總結(jié)》、《php+mysql數(shù)據(jù)庫(kù)操作入門(mén)教程》及《php常見(jiàn)數(shù)據(jù)庫(kù)操作技巧匯總》
希望本文所述對(duì)大家PHP程序設(shè)計(jì)有所幫助。
相關(guān)文章
PHP腳本監(jiān)控Nginx 502錯(cuò)誤并自動(dòng)重啟php-fpm
這篇文章主要介紹了PHP腳本監(jiān)控Nginx 502錯(cuò)誤并自動(dòng)重啟php-fpm,本文直接給出實(shí)現(xiàn)代碼,然后放到cron中執(zhí)行,需要的朋友可以參考下2015-05-05PHP下使用CURL方式POST數(shù)據(jù)至API接口的代碼
PHP下使用curl方式post數(shù)據(jù)至api接口的方法,大部分的API的HTTP請(qǐng)求方式都為GET,所以不管用AJAX和PHP二次處理都能拿到返回的數(shù)據(jù),但是一些API的HTTP請(qǐng)求方式是POST,那么我們就需要使用到curl了2013-02-02PHP簡(jiǎn)單實(shí)現(xiàn)解析xml為數(shù)組的方法
這篇文章主要介紹了PHP簡(jiǎn)單實(shí)現(xiàn)解析xml為數(shù)組的方法,涉及php文件讀取、xml解析相關(guān)操作技巧,需要的朋友可以參考下2018-05-05關(guān)于初學(xué)PHP時(shí)的知識(shí)積累總結(jié)
本篇文章筆者初學(xué)PHP時(shí)的一些知識(shí)積累經(jīng)驗(yàn),需要的朋友參考下2013-06-06php官方微信接口大全(微信支付、微信紅包、微信搖一搖、微信小店)
這篇文章主要介紹了php官方微信接口大全,包括微信支付、微信紅包、微信搖一搖、微信小店,感興趣的小伙伴們可以參考一下2015-12-12php實(shí)現(xiàn)的中文分詞類(lèi)完整實(shí)例
這篇文章主要介紹了php實(shí)現(xiàn)的中文分詞類(lèi),結(jié)合完整實(shí)例形式分析了php基于字符串的遍歷、轉(zhuǎn)換、運(yùn)算等技巧實(shí)現(xiàn)中文分詞功能的具體方法,需要的朋友可以參考下2017-02-02使用NetBeans + Xdebug調(diào)試PHP程序的方法
前些天發(fā)現(xiàn)通過(guò)Notepad++的DBGP插件結(jié)合PHP的xdebug擴(kuò)展可以實(shí)現(xiàn)PHP文件調(diào)試,同時(shí),介紹說(shuō)包含了單步調(diào)試、監(jiān)視變量還有跨文件調(diào)試。2011-04-04