C 設計模式 建造者模式 Builder模式

2021-09-27 17:14:54 字數 2368 閱讀 6079

那麼如何理解這個建造者模式?

假設現在有乙個人的類,人的屬性有性別、名字、年齡。那麼當我們想建立乙個人並且賦予他具體的屬性,那麼我們一般需要分為三步

1.設定性別

2.設定名字

3.設定年齡

這三步可以理解為構造的過程框架(穩定),但是想要實現具體的屬性時,比如男性或者女性,具體的實現細節是變化的

那麼我們就可以通過建造者模式實現

1.建立乙個抽象建造者,提供實現步驟的介面(穩定

2.派生出具體的建造者,比如女性建造者、男性建造者。通過虛函式重寫,實現具體的實現細節(變化

3.建立乙個指示器,實現具體的構建框架(穩定),需要將具體的建造者傳入指示器,建造者就會按照指示器的構造框架建立出對應的物件。

優點:

缺點:

核心:建造模式中,強調的是固定整體構建的演算法,而靈活擴充套件和切換部件的具體構造和產品裝配的方式

首先建立乙個 人的類,具體性別、名字、年齡等屬性

#ifndef _human_h

#define _human_h

#include

#include

using

namespace std;

//人類

class

human;~

human()

;void

set***

(string ***)

void

setname

(string name)

void

setage

(string age)

void

showinfo()

private

: string m_***;

string m_name;

string m_age;};

#endif

建造者類

#ifndef _builder_h

#define _builder_h

#include

"human.h"

class

human

;//抽象建造者類

class

humanbuilder

;virtual

void

builderset***()

=0;virtual

void

buildersetname()

=0;virtual

void

buildersetage()

=0; human*

gethuman()

protected

:humanbuilder()

; human* m_human;};

//女人建造者(具體)

class

womanbuilder

:public humanbuilder;~

womanbuilder()

;void

builderset***()

void

buildersetname()

void

buildersetage()

};//男人建造者(具體)

class

manbuilder

:public humanbuilder;~

manbuilder()

;void

builderset***()

void

buildersetname()

void

buildersetage()

};//指示器

class

humandirector};

#endif

主函式

#include

#include

"human.h"

#include

"builder.h"

using

namespace std;

intmain()

執行結果

C 設計模式 建造者模式

本文固定連線 using system using system.collections.generic using system.linq using system.text using system.threading.tasks public void show 抽象建造者類,確定產品有兩個部...

C 設計模式 建造者模式

ifndef builder h define builder h include 說明 乙個複雜物件的建立,其通常是由很多的子物件構成 建造者模式就提供了一種 封裝機制 來將各個物件的變化隔離開,最終,組合成複雜物件的過程是不會變的。定義 建造者模式 將乙個複雜的物件的構建與它的表示分離,使得同樣...

C 設計模式 建造者模式

建造者模式 在gof的 設計模式 可復用物件導向軟體的基礎 中是這樣說的 將乙個複雜物件的構建與它的表示分離,使得同樣的構建過程可以建立不同的表示。這句話,似懂非懂的。乙個複雜物件的建立,其通常是由很多的子物件構成 如果乙個物件能夠直接就建立好了,那麼也不會稱之為複雜物件。由於專案中需求的變化,這個...