国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

每天一個(gè)設(shè)計(jì)模式之組合模式

kelvinlee / 1615人閱讀

摘要:作者按每天一個(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ì)模式的精髓,目前采用javascriptpython兩種語(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)

這里用代碼模擬文件掃描功能,封裝了FileFolder兩個(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

相關(guān)文章

  • 每天一個(gè)設(shè)計(jì)模式組合模式

    摘要:作者按每天一個(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)方式 ...

    不知名網(wǎng)友 評(píng)論0 收藏0
  • 每天一個(gè)設(shè)計(jì)模式單例模式

    摘要:博主按每天一個(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í)...

    yy736044583 評(píng)論0 收藏0
  • 每天一個(gè)設(shè)計(jì)模式單例模式

    摘要:博主按每天一個(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í)...

    lijy91 評(píng)論0 收藏0
  • 每天一個(gè)設(shè)計(jì)模式命令模式

    摘要:作者按每天一個(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è)人...

    paney129 評(píng)論0 收藏0
  • 每天一個(gè)設(shè)計(jì)模式命令模式

    摘要:作者按每天一個(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è)人...

    lixiang 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<