#ifndef __builder_h__
#define __builder_h__
#include //【說明】
// 乙個複雜物件的建立,其通常是由很多的子物件構成;建造者模式就提供了一種「封裝機制」來將各個物件的變化隔離開,最終,組合成複雜物件的過程是不會變的。
//【定義】
// 建造者模式:將乙個複雜的物件的構建與它的表示分離,使得同樣的構建過程可以建立不同的表示。
//【角色】
// 1) 抽象建造者(builder):給出乙個抽象介面,規範建造者對於生產的產品的各個組成部分的建造。
// 2) 具體建造者(concretebuilder):實現builder介面,針對不同的商業邏輯,具體化各物件部分的建造,最後返回乙個建造好的產品。
// 3) 導演(director):導演,顧名思義,負責規範流程之用。在指導中不涉及產品的建立,只負責保證複雜物件各部分被建立或按某種順序建立。
// 4) 產品(product):複雜物件。
//【意義】
// 使用建造者模式可以有效的封裝變化,在使用建造者模式的場景中,一般產品類和建造者類是比較穩定的,因此,將主要的業務邏輯封裝在導演類中對整體而言可以取得比較好的穩定性。
// 建造者模式很容易進行擴充套件。如果有新的需求,通過實現乙個新的建造者類就可以完成,不用修改之前已經測試通過的**,因此也就不會對原有功能引入風險。
// 導演並不知道自己使用的究竟是builder的哪個子類,只有不知道,子類才能替換,正是因為可替換,元件才有價值。
//【示例】:
//要建造的物件
class computer
;//構建者介面
class icomputerbuilder
virtual ~icomputerbuilder()
virtual void buildfactory(const std::string &factory) = 0;
virtual void buildcpu(const std::string &cpu) = 0;
virtual void buildmemory(int memory) = 0;
virtual void buildcolor(const std::string &color) = 0;
virtual computer * getcomputer() = 0;
};class concretecomputerbuilder : public icomputerbuilder
;class computerdirector
;void testbuilder();
#endif
#include "abstractfactory.h"
void chinaproducta::printproducta()
void chinaproductb::printproductb()
void americaproducta::printproducta()
void americaproductb::printproductb()
iproducta* chinafactory::createproducta()
iproductb* chinafactory::createproductb()
iproducta* americafactory::createproducta()
iproductb* americafactory::createproductb()
void testabstractfactory()
C 設計模式 建造者模式
本文固定連線 using system using system.collections.generic using system.linq using system.text using system.threading.tasks public void show 抽象建造者類,確定產品有兩個部...
C 設計模式 建造者模式
建造者模式 在gof的 設計模式 可復用物件導向軟體的基礎 中是這樣說的 將乙個複雜物件的構建與它的表示分離,使得同樣的構建過程可以建立不同的表示。這句話,似懂非懂的。乙個複雜物件的建立,其通常是由很多的子物件構成 如果乙個物件能夠直接就建立好了,那麼也不會稱之為複雜物件。由於專案中需求的變化,這個...
c 設計模式(建造者模式)
繼續設計模式,今天是建造者模式。include include using namespace std include product產品類 class product void show build類,抽象的建造者,確定產品的組成 class builder virtual builder vir...