成人性生交大片免费看视频r_亚洲综合极品香蕉久久网_在线视频免费观看一区_亚洲精品亚洲人成人网在线播放_国产精品毛片av_久久久久国产精品www_亚洲国产一区二区三区在线播_日韩一区二区三区四区区区_亚洲精品国产无套在线观_国产免费www

主頁(yè) > 知識(shí)庫(kù) > PHP設(shè)計(jì)模式(七)組合模式Composite實(shí)例詳解【結(jié)構(gòu)型】

PHP設(shè)計(jì)模式(七)組合模式Composite實(shí)例詳解【結(jié)構(gòu)型】

熱門(mén)標(biāo)簽:南京3D地圖標(biāo)注 咸陽(yáng)電銷(xiāo) 正規(guī)電銷(xiāo)機(jī)器人系統(tǒng) 邢臺(tái)400電話辦理 南寧電話外呼系統(tǒng)線路 濟(jì)源百應(yīng)電銷(xiāo)機(jī)器人聯(lián)系方式 嘟嘟云外呼系統(tǒng) 辦理400電話哪家好點(diǎn) 重慶外呼電銷(xiāo)系統(tǒng)多少錢(qián)

本文實(shí)例講述了PHP設(shè)計(jì)模式:組合模式Composite。分享給大家供大家參考,具體如下:

1. 概述

在數(shù)據(jù)結(jié)構(gòu)里面,樹(shù)結(jié)構(gòu)是很重要,我們可以把樹(shù)的結(jié)構(gòu)應(yīng)用到設(shè)計(jì)模式里面。

例子1:就是多級(jí)樹(shù)形菜單。

例子2:文件和文件夾目錄

2.問(wèn)題

我們可以使用簡(jiǎn)單的對(duì)象組合成復(fù)雜的對(duì)象,而這個(gè)復(fù)雜對(duì)象有可以組合成更大的對(duì)象。我們可以把簡(jiǎn)單這些對(duì)象定義成類,然后定義一些容器類來(lái)存儲(chǔ)這些簡(jiǎn)單對(duì)象??蛻舳舜a必須區(qū)別對(duì)象簡(jiǎn)單對(duì)象和容器對(duì)象,而實(shí)際上大多數(shù)情況下用戶認(rèn)為它們是一樣的。對(duì)這些類區(qū)別使用,使得程序更加復(fù)雜。遞歸使用的時(shí)候跟麻煩,而我們?nèi)绾问褂眠f歸組合,使得用戶不必對(duì)這些類進(jìn)行區(qū)別呢?

3.   解決方案

        組合模式:將對(duì)象組合成樹(shù)形結(jié)構(gòu)以表示“部分-整體”的層次結(jié)構(gòu)。Composite使得用戶對(duì)單個(gè)對(duì)象和組合對(duì)象的使用具有一致性。

        有時(shí)候又叫做部分-整體模式,它使我們樹(shù)型結(jié)構(gòu)的問(wèn)題中,模糊了簡(jiǎn)單元素和復(fù)雜元素的概念,客戶程序可以向處理簡(jiǎn)單元素一樣來(lái)處理復(fù)雜元素,從而使得客戶程序與復(fù)雜元素的內(nèi)部結(jié)構(gòu)解耦。

  組合模式讓你可以優(yōu)化處理遞歸或分級(jí)數(shù)據(jù)結(jié)構(gòu)。有許多關(guān)于分級(jí)數(shù)據(jù)結(jié)構(gòu)的例子,使得組合模式非常有用武之地。關(guān)于分級(jí)數(shù)據(jù)結(jié)構(gòu)的一個(gè)普遍性的例子是你每次使用電腦時(shí)所遇到的:文件系統(tǒng)。文件系統(tǒng)由目錄和文件組成。每個(gè)目錄都可以裝內(nèi)容。目錄的內(nèi)容可以是文件,也可以是目錄。按照這種方式,計(jì)算機(jī)的文件系統(tǒng)就是以遞歸結(jié)構(gòu)來(lái)組織的。如果你想要描述這樣的數(shù)據(jù)結(jié)構(gòu),那么你可以使用組合模式Composite。

4.  組合模式的分類

1)    將管理子元素的方法定義在Composite類中
2)    將管理子元素的方法定義在Component接口中,這樣Leaf類就需要對(duì)這些方法空實(shí)現(xiàn)。

5. 適用性

以下情況下適用Composite模式:

1).你想表示對(duì)象的部分-整體層次結(jié)構(gòu)

2).你希望用戶忽略組合對(duì)象與單個(gè)對(duì)象的不同,用戶將統(tǒng)一地使用組合結(jié)構(gòu)中的所有對(duì)象。

6. 結(jié)構(gòu)

典型的Composite對(duì)象結(jié)構(gòu)如下圖所示:

7. 構(gòu)建模式的組成

          抽象構(gòu)件角色(component):是組合中的對(duì)象聲明接口,在適當(dāng)?shù)那闆r下,實(shí)現(xiàn)所有類共有接口的默認(rèn)行為。聲明一個(gè)接口用于訪問(wèn)和管理Component子部件。

          這個(gè)接口可  以用來(lái)管理所有的子對(duì)象。(可選)在遞歸結(jié)構(gòu)中定義一個(gè)接口,用于訪問(wèn)一個(gè)父部件,并在合適的情況下實(shí)現(xiàn)它。  

          樹(shù)葉構(gòu)件角色(Leaf):在組合樹(shù)中表示葉節(jié)點(diǎn)對(duì)象,葉節(jié)點(diǎn)沒(méi)有子節(jié)點(diǎn)。并在組合中定義圖元對(duì)象的行為。
          樹(shù)枝構(gòu)件角色(Composite):定義有子部件的那些部件的行為。存儲(chǔ)子部件。在Component接口中實(shí)現(xiàn)與子部件有關(guān)的操作。
          客戶角色(Client):通過(guò)component接口操縱組合部件的對(duì)象。   

8. 效果

     1) • 定義了包含基本對(duì)象和組合對(duì)象的類層次結(jié)構(gòu) 基本對(duì)象可以被組合成更復(fù)雜的組合對(duì)象,而這個(gè)組合對(duì)象又可以被組合,這樣不斷的遞歸下去??蛻舸a中,任何用到   基本對(duì)象的地方都可以使用組合對(duì)象。
     2) • 簡(jiǎn)化客戶代碼 客戶可以一致地使用組合結(jié)構(gòu)和單個(gè)對(duì)象。通常用戶不知道 (也不關(guān)心)處理的是一個(gè)葉節(jié)點(diǎn)還是一個(gè)組合組件。這就簡(jiǎn)化了客戶代碼 , 因?yàn)樵诙x組合的那些類中不需要寫(xiě)一些充斥著選擇語(yǔ)句的函數(shù)。
    3) • 使得更容易增加新類型的組件 新定義的Composite或Leaf子類自動(dòng)地與已有的結(jié)構(gòu)和客戶代碼一起工作,客戶程序不需因新的Component類而改變。
    4) • 使你的設(shè)計(jì)變得更加一般化 容易增加新組件也會(huì)產(chǎn)生一些問(wèn)題,那就是很難限制組合中的組件。有時(shí)你希望一個(gè)組合只能有某些特定的組件。使用Composite時(shí),你不能依賴類型系統(tǒng)施加這些約束,而必須在運(yùn)行時(shí)刻進(jìn)行檢查。

9. 實(shí)現(xiàn)

比較經(jīng)典的例子是樹(shù)形菜單。多級(jí)展示,這個(gè)菜單可以無(wú)限增加節(jié)點(diǎn);例外就是文件遍歷等等。

?php 
/**
 * 組合模式 
 * 
 * @author guisu
 * @version 1.0
 * 組合模式:樹(shù)形菜單
 * 
 * 將對(duì)象組合成樹(shù)形結(jié)構(gòu)以表示"部分-整體"的層次結(jié)構(gòu),使得客戶對(duì)單個(gè)對(duì)象和復(fù)合對(duì)象的使用具有一致性 
 */ 
/**
 * 抽象構(gòu)件角色(component)
 *
 */
abstract class MenuComponent
{
 public function add($component){}
 public function remove($component){}
 public function getName(){}
 public function getUrl(){}
 public function displayOperation(){}
}
/**
 * 樹(shù)枝構(gòu)件角色(Composite)
 *
 */
class MenuComposite extends MenuComponent
{
 private $_items = array();
 private $_name = null;
 private $_align = '';
 public function __construct($name) {
 $this->_name = $name;
 }
 public function add($component) {
 $this->_items[$component->getName()] = $component;
 }
 public function remove($component) {
 $key = array_search($component,$this->_items);
 if($key !== false) unset($this->_items[$key]);
 }
 public function getItems() {
 return $this->_items;
 }
 
 public function displayOperation() {
 static $align = '|';
 if($this->getItems()) {
  //substr($align, strpos($align,));
  $align .= ' _ _ ';
 }else{
  $align .='';
 }
 echo $this->_name, " br/>";
 foreach($this->_items as $name=> $item) {
  echo $align;
  $item->displayOperation();
 }
 }
 
 public function getName(){
 return $this->_name;
 }
}
 
/**
 *樹(shù)葉構(gòu)件角色(Leaf)
 *
 */
class ItemLeaf extends MenuComponent
{
 private $_name = null;
 private $_url = null;
 //public $_align = '----';
 public function __construct($name,$url)
 {
 $this->_name = $name;
 $this->_url = $url;
 }
 
 public function displayOperation()
 {
 echo 'a href="', $this->_url, '" rel="external nofollow" >' , $this->_name, '/a>br/>';
 }
 
 public function getName(){
 return $this->_name;
 }
}
 
class Client
{
 public static function displayMenu()
 {
 $subMenu1 = new MenuComposite("submenu1");
 $subMenu2 = new MenuComposite("submenu2");
 $subMenu3 = new MenuComposite("submenu3");
 
 $subMenu4 = new MenuComposite("submenu4");
 $subMenu5 = new MenuComposite("submenu5");
 /*
 $item1 = new ItemLeaf("sohu","www.163.com");
 $item2 = new ItemLeaf("sina","www.sina.com");
 
 $subMenu4 = new MenuComposite("submenu4");
 $subMenu1->add($subMenu4);
 
 $subMenu4->add($item1);
 $subMenu4->add($item2);
 */
 $item3 = new ItemLeaf("baidu","www.baidu.com");
 $item4 = new ItemLeaf("google","www.google.com");
 $subMenu2->add($item3);
 $subMenu2->add($item4);
 
 $allMenu = new MenuComposite("AllMenu");
 $allMenu->add($subMenu1);
 $allMenu->add($subMenu2);
 $allMenu->add($subMenu3);
 $subMenu3->add($subMenu4);
 $subMenu4->add($subMenu5);
 $allMenu->displayOperation();
 }
}
// 創(chuàng)建menu
Client::displayMenu();
?>

10. 組合模式和其他相關(guān)模式

1)裝飾模式(Decorator模式)經(jīng)常與Composite模式一起使用。當(dāng)裝飾和組合一起使用時(shí),它們

通常有一個(gè)公共的父類。因此裝飾必須支持具有 Add、Remove和GetChild 操作的Component接口。

2)Flyweight模式讓你共享組件,但不再能引用他們的父部件。

3)(迭代器模式)Itertor可用來(lái)遍歷Composite。

4)(觀察者模式)Visitor將本來(lái)應(yīng)該分布在Composite和L e a f類中的操作和行為局部化。

11. 總結(jié)

組合模式解耦了客戶程序與復(fù)雜元素內(nèi)部結(jié)構(gòu),從而使客戶程序可以向處理簡(jiǎn)單元素一樣來(lái)處理復(fù)雜元素。

如果你想要?jiǎng)?chuàng)建層次結(jié)構(gòu),并可以在其中以相同的方式對(duì)待所有元素,那么組合模式就是最理想的選擇。

更多關(guān)于PHP相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《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ì)有所幫助。

您可能感興趣的文章:
  • PHP設(shè)計(jì)模式(九)外觀模式Facade實(shí)例詳解【結(jié)構(gòu)型】
  • PHP設(shè)計(jì)模式(八)裝飾器模式Decorator實(shí)例詳解【結(jié)構(gòu)型】
  • PHP設(shè)計(jì)模式(六)橋連模式Bridge實(shí)例詳解【結(jié)構(gòu)型】
  • PHP設(shè)計(jì)模式(五)適配器模式Adapter實(shí)例詳解【結(jié)構(gòu)型】
  • PHP設(shè)計(jì)模式(四)原型模式Prototype實(shí)例詳解【創(chuàng)建型】
  • PHP設(shè)計(jì)模式(三)建造者模式Builder實(shí)例詳解【創(chuàng)建型】
  • PHP設(shè)計(jì)模式(一)工廠模式Factory實(shí)例詳解【創(chuàng)建型】
  • 深入分析PHP設(shè)計(jì)模式

標(biāo)簽:通遼 隴南 唐山 平頂山 河南 南通 武漢 黃山

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《PHP設(shè)計(jì)模式(七)組合模式Composite實(shí)例詳解【結(jié)構(gòu)型】》,本文關(guān)鍵詞  PHP,設(shè)計(jì)模式,七,組合,模式,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《PHP設(shè)計(jì)模式(七)組合模式Composite實(shí)例詳解【結(jié)構(gòu)型】》相關(guān)的同類信息!
  • 本頁(yè)收集關(guān)于PHP設(shè)計(jì)模式(七)組合模式Composite實(shí)例詳解【結(jié)構(gòu)型】的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    色涩成人影视在线播放| 日韩在线资源| 欧美黄色免费观看| 国产成+人+综合+亚洲欧美丁香花| 成人毛片100部免费看| 欧美aaaaaaaaaaaa| 欧美精品一区三区在线观看| 欧美国产日韩中文字幕在线| 97久久超碰福利国产精品…| 99精品全国免费观看视频软件| 亚洲韩国青草视频| 欧美性色aⅴ视频一区日韩精品| 成人免费精品动漫网站| 欧美一级做一级爱a做片性| 天堂免费在线视频| av女优在线| 天天操天天射天天| 中文字幕在线不卡一区| 欧美a级一区二区| 中文字幕一区二区三区人妻不卡| 亚洲专区国产精品| …久久精品99久久香蕉国产| 国产亚洲精品成人| 亚洲视频在线观看一区二区| 日本成人在线视频网址| 天堂中文av在线资源库| 日韩视频一区二区三区| 在线视频不卡一区二区三区| 在线一级观看| 2021中文字幕在线| 久久小说免费下载| 宅男午夜在线| 亚洲精品日韩av| 国产精品资源在线| 欧美日韩国产在线播放网站| 亚洲三级在线看| 91视频精品在这里| 成人欧美一区二区三区视频xxx| 亚洲视频一区在线| 日韩激情视频| 欧美一卡2卡3卡4卡| 免费a级观看| 精品亚洲a∨| 国产原创在线| 久久密一区二区三区| 成人黄色免费网址| www.四虎网站| 91亚洲精品一区| av在线不卡精品| 97最新国自产拍视频在线完整在线看| 欧美一区二区三区精品| 亚洲精品一区国产精品| 欧美一级特黄视频| 免费97视频在线精品国自产拍| 亚洲综合日韩在线| 色片在线免费观看| 男人添女人下面高潮视频| 亚洲日本成人网| 18精品爽国产三级网站| 99久免费精品视频在线观看| 婷婷五月在线视频| 91精品国产高清久久久久久久久| 中文乱码免费一区二区| 91精品在线一区二区| 欧美另类99xxxxx| 欧美日韩三级一区二区| 国产精品揄拍100视频| 男人的天堂在线视频免费观看| 免费观看成年人视频在线观看| 九一免费在线观看| 久久精品免费观看| 国产一区二区三区视频播放| 性一交一乱一乱一视频| 91精品国产色综合久久不卡98口| 国产露脸91国语对白| 中文av资源| 久久精品一卡二卡| 国产一区视频免费观看| 成年人小视频在线观看| 亚洲a一区二区| 亚洲av永久纯肉无码精品动漫| 亚洲第一视频在线| 欧美疯狂xxxx大交乱88av| 精品久久久久久久久久久久久久| 精品一区在线观看视频| av不卡一区二区三区| 国产小视频在线看| wwwxxxx在线观看| 日韩天堂在线视频| 国产精品日本精品| 韩国在线一区| 人妻妺妺窝人体色www聚色窝| 欧美国产精品人人做人人爱| 日韩高清a**址| 福利一区二区在线| 极品颜值美女露脸啪啪| 亚洲欧洲一区二区三区久久| 日韩亚洲第一页| 中文字幕一二三四| 亚洲人成无码www久久久| 日韩精品一区二区三区四区| 亚洲欧美日韩国产| 91po在线观看91精品国产性色| 国产精品自拍在线| 妺妺窝人体色www在线下载| 亚洲国产高清在线观看| 俄罗斯一级**毛片在线播放| 午夜日韩福利| 91超薄丝袜肉丝一区二区| 黄色三级视屏| 中国男女全黄大片| 欧美高清激情视频| 免费黄色片网站| 免费看黄色av| 国产一区二区三区av电影| 久久久在线视频| 手机精品视频在线观看| 精品视频一区二区三区四区五区| 老司机精品在线| 欧美肥婆xxxx欧美另类| 美女亚洲精品| 国产精品国产三级国产普通话三级| 又色又爽又黄视频| 猫咪在线永久网站| 青青久在线视频免费观看| 久久精品久久久久久国产 免费| 欧美一区二区日韩| 精品国产伦一区二区三| 国产91av在线| 欧美性生活大片免费观看网址| 综合激情五月婷婷| 久久99热精品| 成人久久网站| 空姐吹箫视频大全| 国产一区二区免费看| 牛牛影视久久网| 99re久久最新地址获取| 91久久久久久久久久久久| 中文视频在线观看| 欧美一级二级在线观看| 中文字幕亚洲免费| 亚洲爱情岛论坛永久| 青青草免费观看完整版高清| 黄色片中文字幕| 性一交一乱一伦一色一情| 国产美女福利在线观看| 加勒比在线一区| 日韩三级视频在线看| 国产福利视频在线播放| 一区二区日韩在线观看| 快播电影网址老女人久久| 金瓶狂野欧美性猛交xxxx| 国产成人av一区二区三区在线| 国产日本视频| 中文字幕人妻一区二区三区| 免费福利片在线观看| 亚洲男女毛片无遮挡| 国产不卡一区二区视频| 亚洲成人原创| 久久久一本精品99久久精品| 免费自拍视频| 精品国产高清自在线一区二区三区| 色yeye免费人成网站在线观看| 成人看片毛片免费播放器| 久久99视频免费| 91老司机精品视频| 成人在线观看免费视频| av网站免费在线观看| 91精品久久久久久蜜臀| 日本免费视频在线观看| 中文字幕一区二区三区在线视频| 国产一区二区电影在线观看| 女人香蕉久久**毛片精品| 成全电影播放在线观看国语| 最新中文在线视频| 日本视频www| 成人毛片一区二区三区| 亚洲av成人精品一区二区三区| 可以在线观看的黄色网址| 日韩一区二区三区免费看| 色先锋久久av资源部| 2019日本中文字幕| 国语自产精品视频在线看抢先版图片| 亚洲香蕉在线视频| 精品美女www爽爽爽视频| 永久免费在线观看视频| 国产一级免费视频| 久久91精品国产91久久久| 9色porny| 深夜福利av你懂的| 草莓污污视频在线观看| 亚洲最大的网站| 99精品视频国产| 国产美女精品一区二区三区| 国语对白在线视频| 精品人妻一区二区三区换脸明星| 午夜精品福利视频| re久久精品视频| 97视频免费看| 久久精品电影网站| 国产在视频一区二区三区吞精| 欧美日韩国产综合视频在线观看中文| 亚洲精品白虎| 亚洲av熟女国产一区二区性色| 亚洲91精品| 亚洲永久免费精品| 91在线观看免费高清| 亚洲一区二区视频在线| av中文字幕av| 91精品国产高清一区二区三密臀| 丝袜亚洲另类欧美综合| 浪潮色综合久久天堂| 国产又爽又黄又刺激的软件| 国内精品久久久久影院 日本资源| 手机看片福利永久国产日韩| 欧美jizz19性欧美| 在线观看免费国产小视频| 久久久免费高清视频| 另类国产ts人妖高潮视频| 91婷婷韩国欧美一区二区| 欧美精品一区二区三区高清aⅴ| 99re国产| 色爱综合av| 影音先锋可以看的网站| 日韩黄色一区二区| 欧美在线观看一区| 国产99久久久| 99成人免费视频| 中文字幕第一区| 久久久久久久久久婷婷| 欧美 日韩 国产在线观看| 青花影视在线观看免费高清| 日本学生初尝黑人巨免费视频| 爽爽窝窝午夜精品一区二区| 性xxxxx| 高清免费成人av| 亚洲成人国产| 日本高清网站| 日本久久久精品视频| 中文字幕影片免费在线观看| 91福利资源站| 欧美日韩国产免费观看视频| 91嫩草免费看| 国产黄色在线观看| 精品久久免费视频| 亚洲理论在线a中文字幕| 茄子视频成人免费观看| 精品国内一区二区三区免费视频| 国内精品一区视频| 中文字幕欧美人妻精品| 久久国产精品区| 日本精品在线免费观看| 亚洲免费成人av电影| 日本久久综合| 果冻天美麻豆一区二区国产| 三级精品视频久久久久| 被黑人猛躁10次高潮视频| 成人短剧在线观看| 伊人伊成久久人综合网站| 无码国产伦一区二区三区视频| 欧美xxxxhdvideosex| 91手机在线视频| 一级片视频播放| 97se狠狠狠综合亚洲狠狠| 香蕉网站在线| 亚洲精品天堂网| 日本成人三级| 自拍偷拍在线视频| 黑人精品视频| 东方aⅴ免费观看久久av| 思思99精品视频在线观看| 欧美中文字幕精在线不卡| 四虎视频在线精品免费网址| 欧美美女一区二区在线观看| av免费不卡国产观看| 亚洲精品成人久久久| 亚洲大奶少妇| 91女人18毛片水多国产| 欧美午夜一区| 亚洲成aⅴ人片久久青草影院| 欧美日本韩国一区二区三区| 一本色道久久综合亚洲精品高清| 19禁羞羞电影院在线观看| 日韩美女啊v在线免费观看| 久久福利视频网| 日韩影院精彩在线| 精品人妻无码一区二区性色| 成人爱爱网址| av女片在线| 亚洲激情图片小说视频| 黄色国产精品视频| 狠狠综合久久av| 探花国产精品| 爱爱网站免费| 国产伦精品一区二区三区免费| 91大神在线播放精品| 国产日本欧美一区二区三区| 亚洲另类春色校园小说| 亚洲精品国产精品乱码不99按摩| 400部精品国偷自产在线观看| 欧美激情亚洲天堂| 亚洲乱码在线观看| 又黄又免费的视频| 欧美亚洲爱爱另类综合| 91p九色成人| 91国语精品自产拍| 99三级在线| 亚洲91网站| 久久久久久综合| 欧美a级网站| 亚洲成人电视网| 日本一区二区精品视频| 蜜桃tv一区二区三区| 久久激情婷婷| 色综合免费视频| 日韩免费高清在线| 做爰无遮挡三级| 岛国一区二区三区| 欧美精品久久一区二区三区| www.一区二区三区.com| 亚州精品天堂中文字幕| 亚洲国产精品一区二区第一页| 日韩av一二三| 神马亚洲视频| 最新在线中文字幕| 国产黄色高清在线| 国模无码国产精品视频| 久久精品国产69国产精品亚洲|