麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 編程 > PHP > 正文

學(xué)習(xí)php設(shè)計(jì)模式 php實(shí)現(xiàn)合成模式(composite)

2020-03-24 18:54:26
字體:
供稿:網(wǎng)友
一、意圖
將對(duì)象組合成樹形結(jié)構(gòu)以表示”部分-整體”的層次結(jié)構(gòu)。Composite使用戶對(duì)單個(gè)對(duì)象和組合對(duì)象的使用具有一致性。
Composite變化的是一個(gè)對(duì)象的結(jié)構(gòu)和組成。
二、合成模式中主要角色
抽象組件(Component)角色:抽象角色,給參加組合的對(duì)象規(guī)定一個(gè)接口。在適當(dāng)?shù)那闆r下,實(shí)現(xiàn)所有類共有接口的缺省行為。聲明一個(gè)接口用于訪問和管理Component的子組件
樹葉組件(Leaf)角色:在組合中表示葉節(jié)點(diǎn)對(duì)象,葉節(jié)點(diǎn)沒有子節(jié)點(diǎn)。在組合中定義圖元對(duì)象的行為。
樹枝組件(Composite)角色:存儲(chǔ)子部件。定義有子部件的那些部件的行為。在Component接口中實(shí)現(xiàn)與子部件有關(guān)的操作。
客戶端(Client):通過Component接口操縱組合部件的對(duì)象
三、合成模式的優(yōu)點(diǎn)和缺點(diǎn)
Composite模式的優(yōu)點(diǎn)
1、簡(jiǎn)化客戶代碼
2、使得更容易增加新類型的組件Composite模式的缺點(diǎn):使你的設(shè)計(jì)變得更加一般化,容易增加組件也會(huì)產(chǎn)生一些問題,那就是很難限制組合中的組件
四、合成模式適用場(chǎng)景
1、你想表示對(duì)象的部分-整體層次結(jié)構(gòu)
2、你希望用戶忽略組合對(duì)象和單個(gè)對(duì)象的不同,用戶將統(tǒng)一地使用組合結(jié)構(gòu)中的所有對(duì)象。
五、合成模式與其它模式
裝飾器模式:Decorator模式經(jīng)常與Composite模式一起使用。當(dāng)裝飾與合成一起使用時(shí),它們通常有一個(gè)公共的父類。因此裝飾必須支持具有add,remove和getChild操作的Component接口
享元模式:Flyweight模式讓你共享組件,但不再引用他們的父部件
迭代器模式:Itertor可用來遍歷Composite
訪問者模式:Visitor將本來應(yīng)該分布在Composite和Leaf類中的操作和行為局部化。
六、安全式的合成模式
在Composite類里面聲明所有的用來管理子類對(duì)象的方法。這樣的做法是安全的。因?yàn)闃淙~類型的對(duì)象根本就沒有管理子類的方法,因此,如果客戶端對(duì)樹葉類對(duì)象使用這些方法時(shí),程序會(huì)在編譯時(shí)期出錯(cuò)。編譯通不過,就不會(huì)出現(xiàn)運(yùn)行時(shí)期錯(cuò)誤
這樣的缺點(diǎn)是不夠透明,因?yàn)闃淙~類和合成類將具有不同的接口。
七、安全式的合成模式結(jié)構(gòu)圖八、安全式的合成模式PHP示例
* 抽象組件角色interface Component { * 返回自己的實(shí)例 html' target='_blank'>public function getComposite(); * 示例方法 public function operation(); * 樹枝組件角色class Composite implements Component { private $_composites; public function __construct() { $this- _composites = array(); public function getComposite() { return $this; * 示例方法,調(diào)用各個(gè)子對(duì)象的operation方法 public function operation() { echo 'Composite operation begin: br / foreach ($this- _composites as $composite) { $composite- operation(); echo 'Composite operation end: br / br / * 聚集管理方法 添加一個(gè)子對(duì)象 * @param Component $component 子對(duì)象 public function add(Component $component) { $this- _composites[] = $component; * 聚集管理方法 刪除一個(gè)子對(duì)象 * @param Component $component 子對(duì)象 * @return boolean 刪除是否成功 public function remove(Component $component) { foreach ($this- _composites as $key = $row) { if ($component == $row) { unset($this- _composites[$key]); return TRUE; return FALSE; * 聚集管理方法 返回所有的子對(duì)象 public function getChild() { return $this- _composites;class Leaf implements Component { private $_name; public function __construct($name) { $this- _name = $name; public function operation() { echo 'Leaf operation ', $this- _name, ' br / public function getComposite() { return null;
以上就是使用php實(shí)現(xiàn)合成模式的代碼,還有一些關(guān)于合成模式的概念區(qū)分,希望對(duì)大家的學(xué)習(xí)有所幫助。PHP教程

鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 九色免费视频 | 亚洲国产精品久久久久久久 | 免费看性xxx高清视频自由 | 91麻豆精品国产91久久久无需广告 | 久久久久久久久国产 | 欧美精品久久久久久久多人混战 | 欧美日韩在线中文字幕 | 91精品国产91| 91精品国产毛片 | 亚洲免费高清 | 国产精品美女久久久久久不卡 | 大奶一级片 | 黄色毛片a级 | 欧美成人做爰高潮片免费视频 | 91久久国产综合久久91猫猫 | 在线观看免费毛片视频 | 国产羞羞视频在线观看免费应用 | 日韩一级电影在线观看 | av久草| 午夜视频你懂的 | 成人在线免费观看视频 | 午夜视频在线免费观看 | 国产va在线观看免费 | 最新在线中文字幕 | 免费黄色在线电影 | 精品亚洲视频在线 | 毛片av网 | av在线一区二区三区四区 | 美女毛片在线观看 | 免费毛片在线视频 | av视屏| 三人弄娇妻高潮3p视频 | 麻豆小视频在线观看 | 午夜色片 | 免费观看视频在线 | 中文字幕在线网站 | 日本中文字幕高清 | 国产精品久久久久久婷婷天堂 | 性毛片视频 | 欧美成人高清视频 | 九九色在线观看 |