国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

《設計模式的藝術》筆記 - 外觀模式

這篇具有很好參考價值的文章主要介紹了《設計模式的藝術》筆記 - 外觀模式。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

介紹

? ? ? ? 外觀模式中外部與一個子系統(tǒng)的通信通過一個統(tǒng)一的外觀角色進行,為子系統(tǒng)中的一組接口提供一個一致的入口。外觀模式定義了一個高層接口,這個接口使得子系統(tǒng)更加容易使用。外觀模式又稱為門面模式,它是一種對象結構型模式。

實現

myclass.h

//
// Created by yuwp on 2024/1/12.
//

#ifndef DESIGNPATTERNS_MYCLASS_H
#define DESIGNPATTERNS_MYCLASS_H

#include <iostream>
#include <vector>

class SubSystemA {
public:
    void methodA();
};

class SubSystemB {
public:
    void methodB();
};

class Facade {
public:
    Facade();
    ~Facade();
    void method();

private:
    SubSystemA *m_subA;
    SubSystemB *m_subB;
};

#endif //DESIGNPATTERNS_MYCLASS_H

myclass.cpp

//
// Created by yuwp on 2024/1/12.
//

#include "myclass.h"

void SubSystemA::methodA() {
    std::cout << "SubSystemA::methodA()" << std::endl;
}

void SubSystemB::methodB() {
    std::cout << "SubSystemB::methodB()" << std::endl;
}

Facade::Facade() {
    m_subA = new SubSystemA;
    m_subB = new SubSystemB;
}

Facade::~Facade() {
    if (m_subA) {
        delete m_subA;
    }
    if (m_subB) {
        delete m_subB;
    }
}

void Facade::method() {
    if (m_subA) {
        m_subA->methodA();
    }
    if (m_subB) {
        m_subB->methodB();
    }
}

main.cpp

#include <iostream>
#include <mutex>
#include "myclass.h"

int main() {
    Facade *facade = new Facade();
    facade->method();

    return 0;
}

總結

優(yōu)點

? ? ? ? 1.?對客戶端屏蔽了子系統(tǒng)組件,減少了客戶端所需處理的對象數目并使得子系統(tǒng)使用起來更加容易。通過引入外觀模式,客戶端代碼將變得很簡單,與之關聯(lián)的對象也很少。

? ? ? ? 2.?實現了子系統(tǒng)與客戶端之間的松耦合關系,這使得子系統(tǒng)的變化不會影響到調用它的客戶端,只需要調整外觀類即可。

? ? ? ? 3.?一個子系統(tǒng)的修改對其他子系統(tǒng)沒有任何影響,而且子系統(tǒng)內部變化也不會影響到外觀對象。

? ? ? ? 4.?只是提供了一個訪問子系統(tǒng)的統(tǒng)一入口,并不影響客戶端直接使用子系統(tǒng)類。

缺點

? ? ? ? 1.?不能很好地限制客戶端直接使用子系統(tǒng)類,如果對客戶端訪問子系統(tǒng)類做太多的限制則減少了可變性和靈活性。

? ? ? ? 2.?如果設計不當,增加新的子系統(tǒng)可能需要修改外觀類的源代碼,這違背了開閉原則。

練習

myclass.h

//
// Created by yuwp on 2024/1/12.
//

#ifndef DESIGNPATTERNS_MYCLASS_H
#define DESIGNPATTERNS_MYCLASS_H

#include <iostream>
#include <vector>

class AddressBook {
public:
    void moveTo(const std::string &path);
};

class MsgManager {
public:
    void moveTo(const std::string &path);
};

class BackupFacade {
public:
    BackupFacade();
    ~BackupFacade();
    void backup(const std::string &path);

private:
    AddressBook *m_addrBook;
    MsgManager *m_msgManager;
};

#endif //DESIGNPATTERNS_MYCLASS_H

myclass.cpp

//
// Created by yuwp on 2024/1/12.
//

#include "myclass.h"

void AddressBook::moveTo(const std::string &path) {
    std::cout << "將通訊錄移動到" << path << std::endl;
}

void MsgManager::moveTo(const std::string &path) {
    std::cout << "將短信移動到" << path << std::endl;
}

BackupFacade::BackupFacade() {
    m_addrBook = new AddressBook;
    m_msgManager = new MsgManager;
}

BackupFacade::~BackupFacade() {
    if (m_addrBook) {
        delete m_addrBook;
    }
    if (m_msgManager) {
        delete m_msgManager;
    }
}

void BackupFacade::backup(const std::string &path) {
    std::cout << "------- 開始備份 ---------" << std::endl;
    if (m_addrBook) {
        m_addrBook->moveTo(path);
    }
    if (m_msgManager) {
        m_msgManager->moveTo(path);
    }
    std::cout << "------- 備份完成 ---------" << std::endl;
}

main.cpp文章來源地址http://www.zghlxwxcb.cn/news/detail-806054.html

#include <iostream>
#include <mutex>
#include "myclass.h"

int main() {
    BackupFacade *facade = new BackupFacade();
    facade->backup("SD卡");

    return 0;
}

到了這里,關于《設計模式的藝術》筆記 - 外觀模式的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!

本文來自互聯(lián)網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • 《設計模式的藝術》筆記 - 組合模式

    ? ? ? ? 組合模式組合多個對象形成樹形結構以表示具有“部分-整體”關系的層次結構。組合模式對單個對象(即葉子對象)和組合對象(即容器對象)的使用具有一致性,又可以稱為“部分—整體”(Part-Whole)模式,它是一種對象結構型模式。 myclass.h myclass.cpp main.cpp ?

    2024年01月19日
    瀏覽(15)
  • 《設計模式的藝術》筆記 - 裝飾模式

    ? ? ? ? 裝飾模式動態(tài)地給一個對象增加一些額外的職責,就增加對象功能來說,裝飾模式比生成子類實現更為靈活。裝飾模式是一種對象結構型模式。 ?myclass.h myclass.cpp main.cpp ? ? ? ? 1.?對于擴展一個對象的功能,裝飾模式比繼承更加靈活性,不會導致類的個數急劇增加

    2024年01月19日
    瀏覽(24)
  • 《設計模式的藝術》筆記 - 命令模式

    ? ? ? ? 命令模式將一個請求封裝為一個對象,從而可用不同的請求對客戶進行參數化;對請求排隊或者記錄請求日志,以及支持可撤銷的操作。命令模式是一種對象行為模式,其別名為動作模式或事務模式。 myclass.h myclass.cpp main.cpp ? ? ? ? 只需要增加一個CommandQueue類即可

    2024年01月20日
    瀏覽(29)
  • 《設計模式的藝術》筆記 - 代理模式

    ? ? ? ? 代理模式是給某一個對象提供一個代理,并由代理對象控制對原對象的引用。代理模式是一種對象結構型模式。 myclass.h myclass.cpp main.cpp ? ? ? ? 1.?代理模式能夠協(xié)調調用者和被調用者,在一定程度上降低了系統(tǒng)的耦合度,滿足迪米特法則。 ? ? ? ? 2.?客戶端可以

    2024年01月19日
    瀏覽(14)
  • 《設計模式的藝術》筆記 - 橋接模式

    ? ? ? ? 橋接模式將抽象部分與其實現部分分離,使它們都可以獨立地變化。它是一種對象結構型模式,又稱為柄體模式或接口模式 myclass.h myclass.cpp main.cpp ? ? ? ? 1.?分離抽象接口及其實現部分。橋接模式使用“對象間的關聯(lián)關系”解耦了抽象和實現之間固有的綁定關系,

    2024年01月18日
    瀏覽(23)
  • 《設計模式的藝術》筆記 - 簡單工廠模式

    《設計模式的藝術》筆記 - 簡單工廠模式

    ? ? ? ? 定義一個工廠類,它可以根據參數的不同返回不同類的實例,被創(chuàng)建的實例通常都具有相同的父類。因為在簡單工廠模式中用于創(chuàng)建實例的方法是靜態(tài)方法,因此簡單工廠模式又被稱為靜態(tài)工廠方法模式,屬于類創(chuàng)建型模式 ? ? ? ? 將Factory合并到父類Product中,此時

    2024年01月16日
    瀏覽(21)
  • 《設計模式的藝術》筆記 - 單例模式

    ????????單例模式優(yōu)點是可以確保系統(tǒng)中只存在單個對象實例,缺點是不便擴展,一定程度上違背單一原則,既提供業(yè)務方法,又提供創(chuàng)建對象方法 ? ? ? ? 在類加載的時候就創(chuàng)建好對象,獲取對象時直接返回即可 ? ? ? ? 在類加載的時候沒有創(chuàng)建對象,第一次獲取對象

    2024年02月02日
    瀏覽(18)
  • 《設計模式的藝術》筆記 - 享元模式

    ? ? ? ? 享元模式運用共享技術有效地支持大量細粒度對象的復用。系統(tǒng)只使用少量的對象,而這些對象都很相似,狀態(tài)變化很小,可以實現對象的多次復用。由于享元模式要求能夠共享的對象必須是細粒度對象,因此它又稱為輕量級模式,是一種對象結構型模式。 myclass.

    2024年01月19日
    瀏覽(20)
  • 《設計模式的藝術》筆記 - 抽象工廠模式

    ? ? ? ? 提供了一個創(chuàng)建一系列相關或相互依賴的對象的接口,而無須指定它們具體的類。抽象工廠模式又稱為Kit模式,它是一種對象創(chuàng)建型模式。 ? ? ? ? 在抽象工廠模式中,每個具體工廠都提供了多個工廠方法用于產生多種不同類型的產品,這些產品構成了一個產品族。

    2024年01月16日
    瀏覽(27)
  • 《設計模式的藝術》筆記 - 建造者模式

    ? ? ? ? 建造者模式將一個復雜對象的構建與它的表示分離,使得同樣的構建過程可以創(chuàng)建不同的表示。建造這模式是一種對象創(chuàng)建型模式。 myclass.h myclass.cpp main.cpp ? ? ? ? 優(yōu)點: ? ? ? ? 1.?在建造者模式中,客戶端不必知道產品內部組成的細節(jié),將產品本身與產品的創(chuàng)建

    2024年01月16日
    瀏覽(24)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包