摘要:簡(jiǎn)化了父和子之間的關(guān)系。對(duì)于子節(jié)點(diǎn)來(lái)說(shuō)也是一樣的,過(guò)多的接口暴露有時(shí)候也是一種濫用,同時(shí)也減少了對(duì)外部的依賴(lài)。
定義The Composite Pattern is a partitioning design pattern. The composite pattern describes that a group of objects is to be treated in the same way as a single instance of object. The intent of a composite is to "compose" objects into tree structures to represent part-whole hierarchies. Implementing the composite pattern lets client treat individual objects and compositions uniformly.
From http://en.wikipedia.org/wiki/Composite_pattern
組合模式的目標(biāo)是解耦客戶程序與復(fù)雜元素內(nèi)部架構(gòu),使得客戶程序?qū)Υ凶釉囟家灰曂?/p>
每個(gè)子節(jié)點(diǎn)都可以使復(fù)雜的存在,對(duì)于父節(jié)點(diǎn)來(lái)說(shuō),不需要知道子節(jié)點(diǎn)的復(fù)雜性或者實(shí)現(xiàn)子節(jié)點(diǎn)的復(fù)雜性,只需要關(guān)注子節(jié)點(diǎn)的特定方法,便可以使用子節(jié)點(diǎn)。簡(jiǎn)化了父和子之間的關(guān)系。
對(duì)于子節(jié)點(diǎn)來(lái)說(shuō)也是一樣的,過(guò)多的接口暴露有時(shí)候也是一種濫用,同時(shí)也減少了對(duì)外部的依賴(lài)。
需求按鈕組需求:
有這樣一組按鈕,他們橫向的進(jìn)行排列,根據(jù)當(dāng)前用戶權(quán)限設(shè)置有哪些按鈕被顯示
按鈕可以分成subgroup,按特定的功能進(jìn)行劃分subgroup
類(lèi)圖 角色AbstractButton (Component) 定義一組公共的接口
Button (Leaf) 表示葉子節(jié)點(diǎn)的對(duì)象,葉子節(jié)點(diǎn)沒(méi)有自己的子節(jié)點(diǎn)
ButtonGroup (Composite) 定義有枝節(jié)點(diǎn)行為,用來(lái)存儲(chǔ)子部件,在Component接口中實(shí)現(xiàn)與子部件有關(guān)操作
實(shí)現(xiàn)var prototype = require("prototype"); var AbstractButton = prototype.Class.create({ render: function() { throw new Error("method must be override!"); } }); var Button = prototype.Class.create(AbstractButton, { initialize: function(id, group) { this.id = id; this.group = group; }, render: function () { console.log("render: Button的ID是:"+this.id+", group是:"+this.group); } }); var ButtonGroup = prototype.Class.create(AbstractButton, { initialize: function () { this.buttons = []; }, add: function (btn) { if (btn instanceof Button) { this.buttons.push(btn); } }, remove: function (id) { for (var i = this.buttons.length - 1; i >= 0; i--) { if(this.buttons[i].id === id){ this.buttons.splice(i, 1); } } }, getChild: function (id) { var search = []; for (var i = this.buttons.length - 1; i >= 0; i--) { if(this.buttons[i].id === id){ search.push(this.buttons[i]); } } return search; }, render: function () { for (var i = this.buttons.length - 1; i >= 0; i--) { this.buttons[i].render(); } } }); var Main = function () { var editBtn = new Button("editbtn", "edit"); var deleteBtn = new Button("deletebtn", "edit"); var manageBtn = new Button("managebtn", "edit"); var btngroup = new ButtonGroup(); btngroup.add(editBtn); btngroup.add(deleteBtn); btngroup.add(manageBtn); btngroup.render(); } Main();
注:繼承采用了PrototypeJS提供的Class來(lái)做的,使用了Prototype.Node,關(guān)于prototype如何使用參考Prototype Doc
參考http://en.wikipedia.org/wiki/Composite_pattern
http://www.cnblogs.com/peida/archive/2008/09/09/1284686.html
http://sourcemaking.com/design_patterns/composite
http://baike.baidu.com/view/3591789.htm?fr=aladdin
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/85274.html
摘要:,對(duì)組合對(duì)象執(zhí)行的操作可以向下傳遞到葉子節(jié)點(diǎn)進(jìn)行操作。組合模式之圖片庫(kù)圖片庫(kù)可以有選擇地隱藏或顯示圖片庫(kù)的全部或某一部分單獨(dú)的或是部分的。 本回內(nèi)容介紹 上一回,聊了橋接模式,做了一道計(jì)算題;介一回,聊組合模式(Composite),官方描述組合模式將對(duì)象組合成樹(shù)形結(jié)構(gòu)以表示部分-整體的層次結(jié)構(gòu),組合模式使得用戶對(duì)單個(gè)對(duì)象和組合對(duì)象的使用具有一致性。 組合模式特性 這里我理了一下,就組...
摘要:但是,這并不是采用單例的唯一原因。使用命名空間單例模式也被稱(chēng)為模塊設(shè)計(jì)模式。函數(shù)內(nèi)部聲明了一些局部函數(shù)和或變量。緊隨函數(shù)聲明放置即可立即執(zhí)行外部函數(shù),并將所得的對(duì)象文字費(fèi)賠給變量。 JavaScript設(shè)計(jì)模式-第一部分:?jiǎn)卫J健⒔M合模式和外觀模式 設(shè)計(jì)模式是一些可靠的編程方式,有助于保證代碼更加易于維護(hù)、擴(kuò)展及分離,所有設(shè)計(jì)模式在創(chuàng)建大型JavaScript應(yīng)用程序時(shí)均不可或缺 單...
摘要:文章系列設(shè)計(jì)模式單例模式設(shè)計(jì)模式策略模式設(shè)計(jì)模式代理模式設(shè)計(jì)模式迭代器模式設(shè)計(jì)模式發(fā)布訂閱模式設(shè)計(jì)模式命令模式概念組合模式就是用小的子對(duì)象來(lái)構(gòu)建更大的對(duì)象,而這些小的子對(duì)象本身也許是由更小的孫對(duì)象構(gòu)成的。 前言 本系列文章主要根據(jù)《JavaScript設(shè)計(jì)模式與開(kāi)發(fā)實(shí)踐》整理而來(lái),其中會(huì)加入了一些自己的思考。希望對(duì)大家有所幫助。 文章系列 js設(shè)計(jì)模式--單例模式 js設(shè)計(jì)模式--策略...
摘要:不同于其它靜態(tài)編程語(yǔ)言,實(shí)現(xiàn)組合模式的難點(diǎn)是保持樹(shù)對(duì)象與葉對(duì)象之間接口保持統(tǒng)一,可借助定制接口規(guī)范,實(shí)現(xiàn)類(lèi)型約束。誤區(qū)規(guī)避組合不是繼承,樹(shù)葉對(duì)象并不是父子對(duì)象組合模式的樹(shù)型結(jié)構(gòu)是一種聚合的關(guān)系,而不是。 showImg(https://segmentfault.com/img/bVbu79V?w=800&h=600); 組合模式:又叫 部分整體 模式,將對(duì)象組合成樹(shù)形結(jié)構(gòu),以表示 部分...
摘要:開(kāi)始掃描文件夾文件下不能添加其他文件夾或文件開(kāi)始掃描文件根文件加技術(shù)棧權(quán)威小王子 組合模式 **// 組合模式在對(duì)象間形成樹(shù)形結(jié)構(gòu)// 組合模式中基本對(duì)象和組合對(duì)象被一致對(duì)待// 無(wú)須關(guān)心對(duì)象有多少層 調(diào)用時(shí)只需要在根部進(jìn)行調(diào)用**結(jié)合了命令模式和組合模式的具體實(shí)現(xiàn): const MacroCommand = function () { return { ...
摘要:享元模式通過(guò)分析應(yīng)用程序的對(duì)象,將其解析為內(nèi)在數(shù)據(jù)和外在數(shù)據(jù),減少對(duì)象數(shù)量,從而提高程序的性能。通過(guò)這種方式進(jìn)行事件綁定,可以減少事件處理程序的數(shù)量,這種方式叫做事件委托,也是運(yùn)用了享元模式的原理。事件處理程序是公用的內(nèi)在部分,每個(gè)菜單項(xiàng)各 github 全文地址 : YOU-SHOULD-KNOW-JS JavaScript設(shè)計(jì)模式之外觀模式 概念 外觀模式:為一組復(fù)雜子系統(tǒng)接口提...
閱讀 3513·2021-10-08 10:04
閱讀 863·2019-08-30 15:54
閱讀 2180·2019-08-29 16:09
閱讀 1347·2019-08-29 15:41
閱讀 2272·2019-08-29 11:01
閱讀 1735·2019-08-26 13:51
閱讀 1026·2019-08-26 13:25
閱讀 1806·2019-08-26 13:24