首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C++ >> C++ 入門

C++ 設計模式:建造者模式 (二) — 省略指揮者的實作

     編輯:C++ 入門

動機

為簡化系統結構,可省略指揮者類,將建造流程封裝於抽象建造者的 StartConstruct() 方法中。

結構調整

  • 抽象建造者 PlayPattern 新增 StartConstruct(),內部按順序呼叫 BuildWindow()、BuildMenu() 等。
  • 具體建造者 (FullPattern, SimplePattern, MemoryPattern) 實作各 BuildX(),不需要的部件設為空字串。
  • 客戶端直接呼叫 pattern->StartConstruct() 獲取產品。

程式碼片段

class PlayPattern {
protected:
    Player* m_pPlayer;
public:
    PlayPattern() { m_pPlayer = new Player(); }
    virtual ~PlayPattern() { delete m_pPlayer; }
    virtual void BuildWindow() = 0;
    virtual void BuildMenu() = 0;
    // ... 其他 BuildX ...
    Player* StartConstruct() {
        BuildWindow(); BuildMenu(); BuildPlayList();
        BuildControlBar(); BuildCollectList();
        return m_pPlayer;
    }
};

class FullPattern : public PlayPattern {
public:
    void BuildWindow() override { m_pPlayer->SetWindow("主界面窗口"); }
    void BuildMenu() override { m_pPlayer->SetMenu("主菜單"); }
    void BuildPlayList() override { m_pPlayer->SetPlayList("播放列表"); }
    void BuildControlBar() override { m_pPlayer->SetControlBar("進度條"); }
    void BuildCollectList() override { m_pPlayer->SetCollectList(""); } // 不需要
};
// SimplePattern, MemoryPattern 類似...

客戶端使用

PlayPattern* p = new FullPattern();
Player* player = p->StartConstruct();
player->Display();
delete p;

優缺點

  • 優點:簡化類結構,減少指揮者類。
  • 缺點:建造流程固化在抽象類中,若流程複雜或需動態變更順序,違反單一職責原則,建議保留指揮者。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved