4 建造者模式(Builder Pattern

2021-09-28 13:31:16 字數 3290 閱讀 6293

建造者模式更注重方法的呼叫順序,工廠模式注重建立產品

建立物件的粒度不同,建造者模式可以建立一些複雜的產品,由各種複雜的部件組成,工廠模式建立出來的都是乙個樣子

關注點不同,工廠模式注重的只要把產品建立出來就ok了,而建造者模式不止要建立產品,還需要知道是由那些部件組成的

在某些業務場景,比如說一定的順序決定產出的產品不一樣的話,那麼也要進行順序調整,工廠模式則不關心順序

建造者(builder):為建立乙個產品物件的各個部件指定的抽象介面。

具體建造者(concretebuilder):實現builder的介面,構造和裝配該產品的各個部件,定義並明確它所建立的表示,並提供乙個檢索產品的介面。

指揮者(director):指揮並構造乙個使用builder介面的物件。

產品(product):表示被構造的複雜物件。concretebuilder建立該產品的內部表示並定義它的裝配過程,包含定義組成部件的類,包括將這些部件裝配成最終產品的介面。

建立產品(product)

乙個具體的產品物件,其中包含各個屬性

/**

* 汽車

*/public

class

carpublic

void

setcolor

(string color)

public string getengine()

public

void

setengine

(string engine)

public string getvehiclewheel()

public

void

setvehiclewheel

(string vehiclewheel)

@override

public string tostring()

';}}

建立抽象建造者(builder)

定義產品的建立方法和返回方法

/**

* 建造者抽象類

*/public

abstract

class

builder

建立具體建造者(concretebuilder)

實現抽象介面,構建和裝配各個部件

/**

* 具體建造者

*/public

class

concretebuilder

extends

builder

@override

public

void

builderengine

(string engine)

@override

public

void

buildervehiclewheel

(string vehiclewheel)

@override

public car makecar()

}

建立指揮者(director)

作用主要有兩點。一是:隔離了應用層與物件的生產過程,二是:負責控制產品物件的生產過程。

/**

* 指揮者類

* 針對建造者抽象類程式設計

*/public

class

director

方法注入builder物件

public

void

setbuilder

(builder builder)

//通過抽象方法建造產品

public car makecar

(string color, string engine, string vehiclewheel)

}

客戶端呼叫

客戶端只要知道具體的建造者,就可以通過呼叫指揮者類的相關方法,返回乙個完整的產品

public

class

client

}

執行結果

car
當前類圖

當前有乙個問題,假設產品有很多並且很複雜的引數,當我director.makecar()的時候就很容出錯,假設有20個引數那鬼知道這些引數在什麼位置,所有我們要進行一下改進

解決方案,用鏈式呼叫的方法,在我們實際的開發過程也是比較常見。

在產品中新增靜態內部類,這個靜態內部類就是建造者

/**

* 汽車

*/public

class

car@override

public string tostring()

';}/**

* 汽車建造者

* 1.與具體產品有相同屬性

* 2.進行屬性賦值,並返回當前物件(因為要進行鏈式呼叫,當進行乙個賦值方法後,因為return的是當地物件,所有還可以呼叫其他的賦值方法)

* 3.建立具體產品builder()

*/public

static

class

carbuilder

public carbuilder builderengine

(string engine)

public carbuilder buildervehiclewheel

(string vehiclewheel)

public car builder()

}}

客戶端呼叫

應用層只需要控制,和那個建造這進行互動,然後設定具體的屬性,最後呼叫builder方法,就可以得到乙個完整的產品物件

public

class

client

}

執行結果:

與原來的結果一致

car
這種方式的類圖就很簡單了

這種演進版本的好處:一方面可以按需呼叫,另一方面可以鏈式呼叫比較方便,看起來更優雅一些,注重的一點就是出錯的機率會小一些。

.

4 建造者模式

在軟體系統中,有時候面臨乙個 複雜物件 的建立工作,其通常由各個部分的子物件用一定演算法構成 由於需求的變化,這個複雜物件的各個部分經常面臨著劇烈的變化,但是將它們組合到一起的演算法卻相對穩定。如何應對種變化呢?如何提供一種 封裝機制 來隔離出 複雜物件的各個部分 的變化,從而保持系統中的 穩定構建...

4 建造者模式

1.建造者模式 是將乙個複雜的物件的構建與它的表示分離,使得同樣的構建過程可以建立不同的表示。1 builder 給出乙個抽象介面,以規範產品物件的各個組成成分的建造。這個介面規定要實現複雜物件的哪些部分的建立,並不涉及具體的物件部件的建立。2 concretebuilder 實現builder介面...

設計模式4 建造者模式

首先說說建造者模式要解決乙個什麼樣的問題 流程控制,即保證方法先後順序正確且沒有遺漏.用於靈活指導操作細節.建造者模式包括 乙個導演類 用於規定操作順序 乙個建造者介面 用於規定建造者的操作 具體的建造者 建造者的具體實現類 例如 public class buildertest class fil...