摘要:開始掃描文件夾文件下不能添加其他文件夾或文件開始掃描文件根文件加技術(shù)棧權(quán)威小王子
組合模式
**// 組合模式在對象間形成樹形結(jié)構(gòu)
// 組合模式中基本對象和組合對象被一致對待
// 無須關(guān)心對象有多少層 調(diào)用時(shí)只需要在根部進(jìn)行調(diào)用**
結(jié)合了命令模式和組合模式的具體實(shí)現(xiàn):
const MacroCommand = function () { return { lists: [], add: function (task) { this.lists.push(task) }, excute: function () { //組合對象調(diào)用這里的excute for (let i = 0; i < this.lists.length; i++) { this.lists[i].excute() } } } } const command1 = MacroCommand() //基本對象 command1.add({ excute: () => console.log("煮咖啡") //基本對象調(diào)用這里的excute }) const command2 = MacroCommand() command2.add({ excute: () => console.log("打開電視") }) command2.add({ excute: () => console.log("打開音響") }) const command3 = MacroCommand() command3.add({ excute: () => console.log("打開空調(diào)") }) command3.add({ excute: () => console.log("打開電腦") }) console.log(command1.lists) //所對應(yīng)的內(nèi)存地址不一樣 console.log(command2.lists) //所以lists 保存的不一樣 console.log(command3.lists) const macroCommand = MacroCommand() macroCommand.add(command2) //分次放入不同的參數(shù) macroCommand.add(command3) // 函數(shù)的引用不變,對應(yīng)的就是同 //一個(gè)堆 macroCommand.add(command1) //最后把command1、2、3都放入數(shù)組中 調(diào)用excute,觸發(fā)每一個(gè)數(shù) //組中的excute方法 macroCommand.excute()
demo2 —— 掃描文件夾
掃描文件夾時(shí), 文件夾下面可以為另一個(gè)文件夾也可以為文件, 我們希望統(tǒng)一對待這些文件夾和文件, 這種情形適合使用組合模式。
const Folder = function(folder){ this.folder = folder this.lists = [] } Folder.prototype.add = function(resource){ this.lists.push(resource) } Folder.prototype.scan = function(){ console.log("開始掃描文件夾",this.folder) for(let i =0,folder; folder = this.lists[i++];){ folder.scan() } } const File = function(file){ this.file = file } File.prototype.add = function(){ throw Error("文件下不能添加其他文件夾或文件") } File.prototype.scan = function(){ console.log("開始掃描文件",this.file) } const folder = new Folder("根文件加") const folder1 = new Folder("JS") const folder2 = new Folder("life") const file1 = new File("js技術(shù)棧") const file2 = new File("權(quán)威") const file3 = new File("小王子") folder1.add(file1) folder1.add(file2) folder2.add(file3) folder.add(folder1) folder.add(folder2) folder.scan()
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/106641.html
摘要:,對組合對象執(zhí)行的操作可以向下傳遞到葉子節(jié)點(diǎn)進(jìn)行操作。組合模式之圖片庫圖片庫可以有選擇地隱藏或顯示圖片庫的全部或某一部分單獨(dú)的或是部分的。 本回內(nèi)容介紹 上一回,聊了橋接模式,做了一道計(jì)算題;介一回,聊組合模式(Composite),官方描述組合模式將對象組合成樹形結(jié)構(gòu)以表示部分-整體的層次結(jié)構(gòu),組合模式使得用戶對單個(gè)對象和組合對象的使用具有一致性。 組合模式特性 這里我理了一下,就組...
摘要:但是,這并不是采用單例的唯一原因。使用命名空間單例模式也被稱為模塊設(shè)計(jì)模式。函數(shù)內(nèi)部聲明了一些局部函數(shù)和或變量。緊隨函數(shù)聲明放置即可立即執(zhí)行外部函數(shù),并將所得的對象文字費(fèi)賠給變量。 JavaScript設(shè)計(jì)模式-第一部分:單例模式、組合模式和外觀模式 設(shè)計(jì)模式是一些可靠的編程方式,有助于保證代碼更加易于維護(hù)、擴(kuò)展及分離,所有設(shè)計(jì)模式在創(chuàng)建大型JavaScript應(yīng)用程序時(shí)均不可或缺 單...
摘要:不同于其它靜態(tài)編程語言,實(shí)現(xiàn)組合模式的難點(diǎn)是保持樹對象與葉對象之間接口保持統(tǒng)一,可借助定制接口規(guī)范,實(shí)現(xiàn)類型約束。誤區(qū)規(guī)避組合不是繼承,樹葉對象并不是父子對象組合模式的樹型結(jié)構(gòu)是一種聚合的關(guān)系,而不是。 showImg(https://segmentfault.com/img/bVbu79V?w=800&h=600); 組合模式:又叫 部分整體 模式,將對象組合成樹形結(jié)構(gòu),以表示 部分...
摘要:文章系列設(shè)計(jì)模式單例模式設(shè)計(jì)模式策略模式設(shè)計(jì)模式代理模式設(shè)計(jì)模式迭代器模式設(shè)計(jì)模式發(fā)布訂閱模式設(shè)計(jì)模式命令模式概念組合模式就是用小的子對象來構(gòu)建更大的對象,而這些小的子對象本身也許是由更小的孫對象構(gòu)成的。 前言 本系列文章主要根據(jù)《JavaScript設(shè)計(jì)模式與開發(fā)實(shí)踐》整理而來,其中會(huì)加入了一些自己的思考。希望對大家有所幫助。 文章系列 js設(shè)計(jì)模式--單例模式 js設(shè)計(jì)模式--策略...
摘要:組合繼承組合繼承有時(shí)也叫偽經(jīng)典繼承,該繼承模式將原型鏈和借用構(gòu)造函數(shù)的技術(shù)結(jié)合在一起實(shí)現(xiàn)。寄生組合式繼承通過借用構(gòu)造函數(shù)來繼承屬性,通過原型鏈的混成形式來繼承方法。 原文地址:JavaScript實(shí)現(xiàn)繼承 眾所周知,JavaScript 這門語言在 ES6 出來之前是沒有類(class)這一概念的,所以 JavaScript 中的類都是通過原型鏈來實(shí)現(xiàn)的。同樣,使用 JavaScrip...
閱讀 2919·2021-11-15 11:39
閱讀 1909·2021-09-24 09:48
閱讀 1092·2021-09-22 15:36
閱讀 3619·2021-09-10 11:22
閱讀 3102·2021-09-07 09:59
閱讀 981·2021-09-03 10:28
閱讀 703·2021-09-02 15:15
閱讀 2771·2021-08-27 16:24