為簡化系統結構,可省略指揮者類,將建造流程封裝於抽象建造者的 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;