摘要:作者按每天一個(gè)設(shè)計(jì)模式旨在初步領(lǐng)會(huì)設(shè)計(jì)模式的精髓,目前采用和兩種語(yǔ)言實(shí)現(xiàn)。誠(chéng)然,每種設(shè)計(jì)模式都有多種實(shí)現(xiàn)方式,但此小冊(cè)只記錄最直截了當(dāng)?shù)膶?shí)現(xiàn)方式原文地址是每天一個(gè)設(shè)計(jì)模式之組合模式歡迎關(guān)注個(gè)人技術(shù)博客。
作者按:《每天一個(gè)設(shè)計(jì)模式》旨在初步領(lǐng)會(huì)設(shè)計(jì)模式的精髓,目前采用javascript和python兩種語(yǔ)言實(shí)現(xiàn)。誠(chéng)然,每種設(shè)計(jì)模式都有多種實(shí)現(xiàn)方式,但此小冊(cè)只記錄最直截了當(dāng)?shù)膶?shí)現(xiàn)方式 :)
原文地址是:《每天一個(gè)設(shè)計(jì)模式之組合模式》
歡迎關(guān)注個(gè)人技術(shù)博客:godbmw.com。每周 1 篇原創(chuàng)技術(shù)分享!開源教程(webpack、設(shè)計(jì)模式)、面試刷題(偏前端)、知識(shí)整理(每周零碎),歡迎長(zhǎng)期關(guān)注!
如果您也想進(jìn)行知識(shí)整理 + 搭建功能完善/設(shè)計(jì)簡(jiǎn)約/快速啟動(dòng)的個(gè)人博客,請(qǐng)直接戳theme-bmw
0. 項(xiàng)目地址組合模式·全部代碼
《每天一個(gè)設(shè)計(jì)模式》地址
1. 什么是“組合模式”?組合模式,將對(duì)象組合成樹形結(jié)構(gòu)以表示“部分-整體”的層次結(jié)構(gòu)。
用小的子對(duì)象構(gòu)造更大的父對(duì)象,而這些子對(duì)象也由更小的子對(duì)象構(gòu)成
單個(gè)對(duì)象和組合對(duì)象對(duì)于用戶暴露的接口具有一致性,而同種接口不同表現(xiàn)形式亦體現(xiàn)了多態(tài)性
2. 應(yīng)用場(chǎng)景組合模式可以在需要針對(duì)“樹形結(jié)構(gòu)”進(jìn)行操作的應(yīng)用中使用,例如掃描文件夾、渲染網(wǎng)站導(dǎo)航結(jié)構(gòu)等等。
3. 代碼實(shí)現(xiàn)這里用代碼模擬文件掃描功能,封裝了File和Folder兩個(gè)類。在組合模式下,用戶可以向Folder類嵌套File或者Folder來(lái)模擬真實(shí)的“文件目錄”的樹結(jié)構(gòu)。
同時(shí),兩個(gè)類都對(duì)外提供了scan接口,File下的scan是掃描文件,Folder下的scan是調(diào)用子文件夾和子文件的scan方法。整個(gè)過(guò)程采用的是深度優(yōu)先。
3.1 python3 實(shí)現(xiàn)class File: # 文件類 def __init__(self, name): self.name = name def add(self): raise NotImplementedError() def scan(self): print("掃描文件:" + self.name) class Folder: # 文件夾類 def __init__(self, name): self.name = name self.files = [] def add(self, file): self.files.append(file) def scan(self): print("掃描文件夾: " + self.name) for item in self.files: item.scan() if __name__ == "__main__": home = Folder("用戶根目錄") folder1 = Folder("第一個(gè)文件夾") folder2 = Folder("第二個(gè)文件夾") file1 = File("1號(hào)文件") file2 = File("2號(hào)文件") file3 = File("3號(hào)文件") # 將文件添加到對(duì)應(yīng)文件夾中 folder1.add(file1) folder2.add(file2) folder2.add(file3) # 將文件夾添加到更高級(jí)的目錄文件夾中 home.add(folder1) home.add(folder2) # 掃描目錄文件夾 home.scan()
執(zhí)行$ python main.py, 最終輸出結(jié)果是:
掃描文件夾: 用戶根目錄 掃描文件夾: 第一個(gè)文件夾 掃描文件:1號(hào)文件 掃描文件夾: 第二個(gè)文件夾 掃描文件:2號(hào)文件 掃描文件:3號(hào)文件3.2 ES6 實(shí)現(xiàn)
// 文件類 class File { constructor(name) { this.name = name || "File"; } add() { throw new Error("文件夾下面不能添加文件"); } scan() { console.log("掃描文件: " + this.name); } } // 文件夾類 class Folder { constructor(name) { this.name = name || "Folder"; this.files = []; } add(file) { this.files.push(file); } scan() { console.log("掃描文件夾: " + this.name); for (let file of this.files) { file.scan(); } } } let home = new Folder("用戶根目錄"); let folder1 = new Folder("第一個(gè)文件夾"), folder2 = new Folder("第二個(gè)文件夾"); let file1 = new File("1號(hào)文件"), file2 = new File("2號(hào)文件"), file3 = new File("3號(hào)文件"); // 將文件添加到對(duì)應(yīng)文件夾中 folder1.add(file1); folder2.add(file2); folder2.add(file3); // 將文件夾添加到更高級(jí)的目錄文件夾中 home.add(folder1); home.add(folder2); // 掃描目錄文件夾 home.scan();
執(zhí)行$ node main.js,最終輸出結(jié)果是:
掃描文件夾: 用戶根目錄 掃描文件夾: 第一個(gè)文件夾 掃描文件: 1號(hào)文件 掃描文件夾: 第二個(gè)文件夾 掃描文件: 2號(hào)文件 掃描文件: 3號(hào)文件4. 參考
《JavaScript 設(shè)計(jì)模式和開發(fā)實(shí)踐》
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/42830.html
摘要:作者按每天一個(gè)設(shè)計(jì)模式旨在初步領(lǐng)會(huì)設(shè)計(jì)模式的精髓,目前采用和兩種語(yǔ)言實(shí)現(xiàn)。誠(chéng)然,每種設(shè)計(jì)模式都有多種實(shí)現(xiàn)方式,但此小冊(cè)只記錄最直截了當(dāng)?shù)膶?shí)現(xiàn)方式原文地址是每天一個(gè)設(shè)計(jì)模式之組合模式歡迎關(guān)注個(gè)人技術(shù)博客。 作者按:《每天一個(gè)設(shè)計(jì)模式》旨在初步領(lǐng)會(huì)設(shè)計(jì)模式的精髓,目前采用javascript和python兩種語(yǔ)言實(shí)現(xiàn)。誠(chéng)然,每種設(shè)計(jì)模式都有多種實(shí)現(xiàn)方式,但此小冊(cè)只記錄最直截了當(dāng)?shù)膶?shí)現(xiàn)方式 ...
摘要:博主按每天一個(gè)設(shè)計(jì)模式旨在初步領(lǐng)會(huì)設(shè)計(jì)模式的精髓,目前采用靠這吃飯和純粹喜歡兩種語(yǔ)言實(shí)現(xiàn)。單例模式用途如果一個(gè)類負(fù)責(zé)連接數(shù)據(jù)庫(kù)的線程池日志記錄邏輯等等,此時(shí)需要單例模式來(lái)保證對(duì)象不被重復(fù)創(chuàng)建,以達(dá)到降低開銷的目的。 博主按:《每天一個(gè)設(shè)計(jì)模式》旨在初步領(lǐng)會(huì)設(shè)計(jì)模式的精髓,目前采用javascript(_靠這吃飯_)和python(_純粹喜歡_)兩種語(yǔ)言實(shí)現(xiàn)。誠(chéng)然,每種設(shè)計(jì)模式都有多種實(shí)...
摘要:博主按每天一個(gè)設(shè)計(jì)模式旨在初步領(lǐng)會(huì)設(shè)計(jì)模式的精髓,目前采用靠這吃飯和純粹喜歡兩種語(yǔ)言實(shí)現(xiàn)。單例模式用途如果一個(gè)類負(fù)責(zé)連接數(shù)據(jù)庫(kù)的線程池日志記錄邏輯等等,此時(shí)需要單例模式來(lái)保證對(duì)象不被重復(fù)創(chuàng)建,以達(dá)到降低開銷的目的。 博主按:《每天一個(gè)設(shè)計(jì)模式》旨在初步領(lǐng)會(huì)設(shè)計(jì)模式的精髓,目前采用javascript(_靠這吃飯_)和python(_純粹喜歡_)兩種語(yǔ)言實(shí)現(xiàn)。誠(chéng)然,每種設(shè)計(jì)模式都有多種實(shí)...
摘要:作者按每天一個(gè)設(shè)計(jì)模式旨在初步領(lǐng)會(huì)設(shè)計(jì)模式的精髓,目前采用和兩種語(yǔ)言實(shí)現(xiàn)。該對(duì)象執(zhí)行命令。命令模式按鈕參考設(shè)計(jì)模式和開發(fā)實(shí)踐如何實(shí)現(xiàn)命令模式 作者按:《每天一個(gè)設(shè)計(jì)模式》旨在初步領(lǐng)會(huì)設(shè)計(jì)模式的精髓,目前采用javascript和python兩種語(yǔ)言實(shí)現(xiàn)。誠(chéng)然,每種設(shè)計(jì)模式都有多種實(shí)現(xiàn)方式,但此小冊(cè)只記錄最直截了當(dāng)?shù)膶?shí)現(xiàn)方式 :) 原文地址是:《每天一個(gè)設(shè)計(jì)模式之命令模式》 歡迎關(guān)注個(gè)人...
摘要:作者按每天一個(gè)設(shè)計(jì)模式旨在初步領(lǐng)會(huì)設(shè)計(jì)模式的精髓,目前采用和兩種語(yǔ)言實(shí)現(xiàn)。該對(duì)象執(zhí)行命令。命令模式按鈕參考設(shè)計(jì)模式和開發(fā)實(shí)踐如何實(shí)現(xiàn)命令模式 作者按:《每天一個(gè)設(shè)計(jì)模式》旨在初步領(lǐng)會(huì)設(shè)計(jì)模式的精髓,目前采用javascript和python兩種語(yǔ)言實(shí)現(xiàn)。誠(chéng)然,每種設(shè)計(jì)模式都有多種實(shí)現(xiàn)方式,但此小冊(cè)只記錄最直截了當(dāng)?shù)膶?shí)現(xiàn)方式 :) 原文地址是:《每天一個(gè)設(shè)計(jì)模式之命令模式》 歡迎關(guān)注個(gè)人...
閱讀 942·2021-09-07 09:58
閱讀 1491·2021-09-07 09:58
閱讀 2885·2021-09-04 16:40
閱讀 2506·2019-08-30 15:55
閱讀 2414·2019-08-30 15:54
閱讀 1371·2019-08-30 15:52
閱讀 434·2019-08-30 10:49
閱讀 2607·2019-08-29 13:21