歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

C++設計模式-----建造者模式\生成器模式

問題:

如果我們想寫一個建造人的類,我們可以這樣寫: 

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

Copyright © Linux教程網 All Rights Reserved