建造者模式

2021-10-07 19:29:42 字數 2914 閱讀 3383

建造者模式

需求分析:

需要建房子:這一過程為打樁、砌牆、封頂

房子有各種各樣的要求,比如普通房子,高樓,別墅,各種房子的過程雖然一樣,但是要求不同

雖然各種房子的具體要求不同,但是大致的流程相似因此我們就可以將相似的部分抽取成乙個介面或者乙個抽象類;然後再由不同的具體實現類進行建立,這裡推薦採用抽象類,如果是接**們需要實現介面中的每一種方法,這就導致如果是建造別墅可能會由打造泳池這個操作,但是其他的房子並沒有操作,所以我們其他的房子實現類是沒有必要去實現這個過程的所以這裡採用了抽象類進行實現;

按照我們的分工,我們是採用了housebuilder進行指揮者與建造者的隔離,這樣就可以讓指揮者建立不同的房子,同時在我們需要拓展的時候也僅僅需要繼續建立乙個實現類就好了;

這個過程其實真的有點類似於現實生活中的場景,每個人都有自己明確的分工,指揮者就相當於設計師,而housebuilder可以看作是乙個建設局胡總和外包,具體的builder是具體的專案負責團隊,而你就是這個需求者,在這裡我們稱之為client;

最終我們根據此種依賴關係傳簡最終的uml類圖來設計我們的**:

[外鏈轉存失敗,源站可能有防盜煉機制,建議將儲存下來直接上傳

我們最終的目標就是獲取house這個產品;

建立者模式:

建立者模式又叫建造者模式,是將乙個複雜的物件的構建與它的表示分離,使 得同樣的構建過程可以建立不同的表示。建立者模式隱藏了複雜物件的建立過程,它把複雜物件的建立過程加以抽象,通過子類繼承或者過載的方式,動態的建立具有復合屬性的物件。

使用場景

隔離複雜物件的建立和使用,相同的方法,不同執行順序,產生不同事件結果

多個部件都可以裝配到乙個物件中,但產生的執行結果不相同

產品類非常複雜或者產品類因為呼叫順序不同而產生不同作用

初始化乙個物件時,引數過多,或者很多引數具有預設值

builder模式不適合建立差異性很大的產品類

產品內部變化複雜,會導致需要定義很多具體建造者類實現變化,增加專案中類的數量,增加系統的理解難度和執行成本

需要生成的產品物件有複雜的內部結構,這些產品物件具備共性;

主要作用

在使用者不知道物件的建造過程和細節的情況下就可以直接建立複雜的物件。

使用者只需要給出指定複雜物件的型別和內容;

建造者模式負責按順序建立複雜物件(把內部的建造過程和細節隱藏起來)

例如:工廠(建造者模式):負責製造汽車(組裝過》程和細節在工廠內)

汽車購買者(使用者):你只需要說出你需要的》型號(物件的型別和內容),然後直接購買就可》以使用了

模式講解:

那現在我們就開始建立我們的房子吧:

首先我們建立乙個抽象類:

public

abstract

class

housebuilder()

commonhouse:

public

class

commonhouse

extends

housebuilder

@override

public

void

buildwalls()

@override

public

void

roofed()

@override

public house build()

@override

public

void

createpool()

}

highhouse:

public

class

highbuilding

extends

housebuilder

@override

public

void

buildwalls()

@override

public

void

roofed()

@override

public house build()

@override

public

void

createpool()

}

housedirect:

/**

* @author wyp867322

* @version 1.0

* @date 2020/7/6 1:13

*/public

class

housedirector

public

void

sethousebuilder

(housebuilder housebuilder)

public house createhouse()

}

client:

public

class

client

}

結合影象來看,具體的建造細節(每一步需要做什麼)由實體類完成,指揮者僅僅安排建造的過程(不同的房子需要怎麼做)最終在指揮者這裡獲得成品提供給需求者完成建立;}}

```mermaid

graph lr

a[普通住房]-->b[共同特徵]

c[高樓大廈]-->b

d[別墅]-->b

b-->e[指揮者]

e-->|成品|f[需求者]

g[成品]-->e

結合影象來看,具體的建造細節(每一步需要做什麼)由實體類完成,指揮者僅僅安排建造的過程(不同的房子需要怎麼做)最終在指揮者這裡獲得成品提供給需求者完成建立;

建造者模式

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

建造者模式

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

建造者模式

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