建造者模式更注重方法的呼叫順序,工廠模式注重建立產品
建立物件的粒度不同,建造者模式可以建立一些複雜的產品,由各種複雜的部件組成,工廠模式建立出來的都是乙個樣子
關注點不同,工廠模式注重的只要把產品建立出來就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...