23种设计模式C++源码与UML实现--建造者模式
建造者模式
代碼倉庫地址:建造者模式
Builder模式也叫建造者模式或者生成器模式,是由GoF提出的23種設計模式中的一種。Builder模式是一種對象創建模式之一,用來隱藏復合對象的創建過程。他把復合對象的創建過程加以抽象,通過子類繼承和重載的方式,動態地創建具有復合屬性的對象。
對象的創建:Builder模式是為了對象的創建而設計的模式-創建的是一個復合對象,被創建的對象為一個具有復合屬性的復合對象,關注對象創建的各個部分的創建過程,不同工廠(Builder)對產品屬性有不同的創建方法。
- Builder:為創建產品各個部分,統一抽象接口
- ConcreteBuilder: 具體的創建產品的各個部分,部分A,部分B,部分C
- Director: 構造一個使用Builder接口的對象
- Product:表示被構造的復雜對象
ConcreteBuilder創建該產品的內部表示并定義它的裝配過程,包含定義組成部分的類,包含將這些部件裝配成最終產品的接口。
適用情況:
? 一個對象的構建比較復雜,將一個對象的構建和對象的表示進行分離。
說白了:建造者模式,其實就是相當于一個設計師,指揮建造師造房子,建造師可能是不同的,因為每個建造師建造水平和會造的房子都是不一樣的。
創建者模式和工廠模式的對比
Factory模式中:
實現了購買者和生產線的隔離,強調的是結果
Builder模式
這樣做,目的是為了實現復雜對象生產線和其部件的解耦。強調的是過程
兩者的區別在于以下幾種情況:
工廠模式不考慮對象的組裝過程,而直接生成一個我想要的對象。
Builder模式先一個個的創建對象的每一個部件,再統一組裝成一個對象
工廠模式所解決的問題是,工廠生產產品
而Builder模式解決的是工廠控制產品 生成器組裝各個部件的過程,然后從產品生成器中得到產品。
前期問題的拋出-需要建造者模式的原因
#include <iostream> #include <string> using namespace std;class House { public:void setDoor(string door){this->m_door = door;}void setWall(string wall){this->m_wall = wall;}void setWindow(string window){this->m_window = window;}string getDoor(void){cout << m_door << endl;return m_door;}string getWall(void){cout << m_wall << endl;return m_wall;}string getWindow(void){cout << m_window << endl;;return m_window;}private:string m_door;string m_wall;string m_window; };class Builder { public:Builder(void){m_house = new House;}~Builder(void){delete m_house;}void MakeBuilder(void){BuildDoor(m_house);BuildWall(m_house);BuildWindow(m_house);}void BuildDoor(House *h){h->setDoor("door");}void BuildWall(House *h){h->setWall("wall");}void BuildWindow(House *h){h->setWindow("window");}House *GetHouse(void){return m_house;}private:House *m_house; };int main(int argc, char const *argv[]) {// 不需要建造者,客戶直接造房子// 門窗 墻體玻璃等都需要用戶管理House *house = new House;house->setDoor("user door");house->setWall("user Wall");house->setWindow("big window");house->getDoor();house->getWall();house->getWindow();delete house;// 華麗的分割線cout << "=========================" << endl;// 請工程隊 建造房子// 將建造過程交給工程隊, 是不是還可以請個指揮建造的? 這樣客戶就能完全解放出來了Builder *builder = new Builder;builder->MakeBuilder();house = builder->GetHouse();house->getDoor();house->getWall();house->getWindow();delete builder;cout << "builder pattern." << endl;return 0; }兩者,雖然都建造好了房子,但是建筑隊參加之后,客戶就不需要參與房子的建造的每個過程了,將建造過程與使用者之間進行分離,這就是建造者模式想要達到的效果
andrew@andrew-G3-3590:/work/linux-sys/DesignPatterns/cpp/build$ ./builder_pattern_question user door use Wall big window ========================= door wall window builder pattern.那除了這樣其實可以再請一個指揮者過來,因為實際中會有不同的建造者參與競爭,每個建造者精通的地方都是不一樣的,指揮者參與之后,用戶只需要把自己的需求告知指揮者就行。
- 建造者模式,就是通過虛工程對基類,實現通過指揮者,指揮不同的建筑隊建設不同的房子
總結
以上是生活随笔為你收集整理的23种设计模式C++源码与UML实现--建造者模式的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: freemarker -基本概念
- 下一篇: 【2016年第2期】专题导读:大数据与社