問題:
如果我們想寫一個建造人的類,我們可以這樣寫:
class Person
{
public:
void BuildHead();
void BuildBody();
void BuildArmLetf();
void BuildArmRight();
void BuildLegLeft();
void BuildLegRight();
};
但是當我們想建造一個瘦的人,胖的人,高的人,那我們該怎麼辦呢?
我們當然會想到吧把上面的建造人的類定義成一個抽象類,然後再定義建造瘦人類,胖人類,高人類去依次實現抽象類的純虛函數。
這樣我們就把建造的對象與它的不同表現分離開了,使得同樣的建造過程可以創建不同的表現。這就是建造者模式的特點。
如果我們用了建造者模式,那麼用戶就只需指定需要建造的類型就可以得到它們,而具體建造的過程和細節就不需要知道了。
建造者模式(生成器模式):
將一個復雜對象的構建於它的表現分離,使得同樣的構建過程可以創建不同的表現。
建造者模式(Builder)結構圖:
總結:
Builder是什麼:是為創建一個Product對象的各子部件的抽象接口
ConcreteBuilder:它是具體建造者,實現Builder接口,構造和裝配各子部件。
Product:那些具體的產品角色
Director:指揮者,它是建造一個使用Builder接口的對象,它主要是用於創建一些復雜的對象,這些對象內部構建間的建造順序通常是穩定的,但對象內部的構建通常面臨著復雜的變化。
建造者模式的好處:
使得建造代碼與表示代碼分離,由於建造者隱藏了該產品是如何組裝的,所以若需要改變一個產品的內部表示,只需要再定義一個具體的建造者就可以了。
建造者模式基本代碼:
class Product
{
public:
void Add(String part); //添加產品部件
};
Builder類-------抽象建造者類,確定產品由兩個部分PartA和PartB組成,並聲明一個得到產品建造後結果的方法:GetResult。
class Builder
{
public:
virtual void BuildPartA()=0;
virtual void BuildPartB()=0;
virtual void GetResult()=0;
};
ConcreteBuilder1類-------具體建造者類
class ConcreteBuilder1 : Builder
{
private:
Product product = new Product();
public:
void BuildPartA()
{
product.Add(“部件A”);
}
voidBulidPartB()
{
product.Add(“部件B”);
}
void GetResult()
{
return product;
}
};
接下來請看第2頁精彩內容:http://www.linuxidc.com/Linux/2013-10/90908p2.htm