建造者模式(11)

2021-07-26 11:18:48 字數 3251 閱讀 3991

今天,我們來講一下建造者模式。

一、案例

我們來用winform畫乙個小人,乙個頭,乙個身體,兩隻手,兩條腿。

我們一般想到的**如下:

1

///2

///畫小人

3///

4///

5///

6private

void picturebox1_paint(object

sender, painteventargs e)

7

執行的效果:

嗯,好,下面,我們再畫乙個稍微胖一點的小人。

**如下:

1

private

void picturebox2_paint(object

sender, painteventargs e)

2

執行效果如下

咦,我們好像少花了條腿哦。

哈哈,像這樣粗心的情況我們經常出現

二、演繹

1、第一步演繹

1

///2

///建造瘦小人的類

3///

4class

personthinbuilder514

///15

///建造小人

16///

17public

void

build()

1826 }

客戶端

1

private

void picturebox1_paint(object

sender, painteventargs e)

2

我們進行了第一步的改革,看了一下**,將客戶端的畫小人的過程一直到了乙個類中,客戶端只需要呼叫這個類就可以了,但是,這仍然沒有解決我們上面提到的問題,如果我們要畫乙個胖一點的小人,我們還需要建乙個類,然後再寫一遍建立過程,很難保證落下什麼東西(比如:少了乙隻手也說不定哦)

好,那麼我們到底該如何解決呢?

下面就是我們將要介紹的 建造者模式。

建造者模式:將乙個物件複雜的構建,與它的表示分離,使得同樣的構建,可以建立不同的表示。

如果我們使用了建造者模式,那麼,使用者只需要指定建造的型別就可以得到他們了,而具體的建造的細節和過程就不需要知道了。

那麼,我們畫小人的案例該怎樣使用建造者模式呢?我們一步步來分析。

畫小人,都需要畫,頭、身體、左手、右手、左腿、右腿。

好,下面呢,我們就先來定義乙個抽象的畫小人的類,將這個過程固定住,不讓任何人遺忘當中的任何一步。

1

abstract

class

personbuilder211

12public

abstract

void

buildhead();

13public

abstract

void

buildbody();

14public

abstract

void

buildarmleft();

15public

abstract

void

buildarmright();

16public

abstract

void

buildlegleft();

17public

abstract

void

buildlegright();

18 }

然後,我們需要建造乙個瘦一點的小人,我們可以讓瘦一點的小人去繼承這個抽象類。那麼這個類就必須重寫抽象類中的方法了,要不編譯不通過的。所以,畫小人就不會丟三落四了。

1

class

personthinbuilder : personbuilder26

7public

override

void

buildhead()811

12public

override

void

buildbody()

1316

17public

override

void

buildarmleft()

1821

22public

override

void

buildarmright()

2326

27public

override

void

buildlegleft()

2831

32public

override

void

buildlegright()

3336 }

同理,胖子小人類也用上面的方式,繼承抽象類,**差不多,就不在寫了。

這樣就完事了嗎?如果完事了的話,那麼我在客戶端呼叫的時候,還是需要呼叫類裡面的方法,萬一哪乙個方法沒有呼叫,也就會出現丟三落四的情況了,這根本沒有解決問題呀。所以,到這裡,我們還沒有完事呢。

建造者模式還有乙個非常重要的類,指揮者類。指揮者類是用來控制建造過程的,同時它也是隔離使用者與建造過程的關聯的。

好,下面我們來寫乙個指揮者類。

1

class

persondirector29

//根據使用者的選擇建造小人

10public

void

createperson()

1119 }

這樣,指揮者類寫好了。其實指揮者類就是根據使用者的選擇,來一步一步的建造小人,而建造的過程在指揮者裡面已經完成了,使用者就不需要知道了。

那麼,客戶端就是這樣的了。

1

private

void picturebox1_paint(object

sender, painteventargs e)

2

ok,這樣就成功的將我們的案例用建造者模式構建出來了。

好了,建造者模式今天就講到這裡了,下篇博文我們將觀察者模式

建造者模式

1.定義 將乙個複雜物件的構建與它的表示分離,使得同樣的構建過程可以建立不同的表示。2.uml 類圖 結構 該結構 演示了複雜物件被一步一步建立的建造者模式。builder pattern structural example using system using system.collection...

建造者模式

軟體領域中的設計模式為開發人員提供了一種使用專家設計經驗的有效途徑。設計模式中運用了物件導向程式設計語言的重要特性 封裝 繼承 多型,真正領悟設計模式的精髓是可能乙個漫長的過程,需要大量實踐經驗的積累。最近看設計模式的書,對於每個模式,用c 寫了個小例子,加深一下理解。主要參考 大話設計模式 和 設...

建造者模式

建造者模式將複雜物件的構建和它的表示分離,使同樣的構建過程能夠構建出不同的表示。以乙個建造小人為例子,可以建造2種小人,胖子和瘦子 include using namespace std class builder 抽象建造者類 class buildthinman public builder 瘦...