builder
生成器模式是一種建立型模式,它主要是應對專案中一些複雜物件的建立工作。所謂「複雜物件」,是只:此物件中還含有其它的子物件。
builder
模式所面對的情況是:各個部分的子物件用一定的演算法構成;由於需求的變化,這個複雜物件的各個部分經常面臨著劇烈的變化,但是將他們組合在一起的演算法卻相對穩定。簡單的說:子物件變化較頻繁,對演算法相對穩定。
這是解決乙個複雜物件的建立工作,現在變化的部分和相對穩定的部分已經明確,我們要做的是隔離變化,如何將子物件和演算法隔離是要解決的問題。
《設計模式》中說道:將乙個複雜物件的構建與其表示向分離,使得同樣的構建過程可以建立不同的表示。
我們現在定義乙個場景:還是選擇汽車,
bmw和
bora
。試想一下,如果我們用較為普通的寫法可以寫成如下**:
public
static
void
main()
public
class car
當我們不確定或因需求變化而改變對汽車品牌的選擇時,我們也許會頻繁的更改
car類中的實現。
現在我們用
manager
來管理汽車的構建。當然是構建乙個抽象的類物件(物件如下圖的
builder
,抽象類為
abstractbuilder),
對於bmw
和bora
的構建型別繼承
abstractbuilder
類首先我們先來編寫
abstractbuilder
抽象類的實現,**如下:
public
abstract
class abstractbuilder
public
abstract
class car
然後我們再來實現bmw和bora的構建,也就是builder模式中頻繁變化的部分,他們都要繼承abstractbuilder
bmw:
public
class bmwbuilder:abstractbuilder
public
override
void buildwheel()
public
override
void buildoilbox()
public
override
void buildbody()
public
override car getcar()
}public
class bmwcar:car
{}bora
:public
class borabuilder:abstractbuilder
public
override
void buildwheel()
public
override
void buildoilbox()
public
override
void buildbody()
public
override car getcar()
}public
class boracar:car
{}現在我們使用一種manager方法來管理汽車的構建,這也就是builder模式中提到的相對穩定的演算法,我用乙個類來實現:
private
class carmanager
}現在我們可以在客戶程式中呼叫這個manager來構建car:
public
static
void
main()
結果如下:
wheel:borawheel
oilbox:boraoilbox
body:borabody
如果我們現在要換成
bmw,我們只要在
main
()函式中改變
manager.createcar
中的引數就可以:
public
static
void
main()
結果如下:
wheel:bmwwheel
oilbox:bmwoilbox
body:bmwbody
這樣,經過簡單的修改可以實現對不同
car的構建。如果我們還有其他汽車的實現只要將他的類繼承
abstractbuilder
,然後在
main
()中修改就可以。說道這裡,我想起了在第一篇中提到的設計模式中的「開
---閉原則」,這個方式是很符合這個原則的,對**進行了擴充套件,以減少了**修改量。而且我們還有很多方法可以利用,如:
webconfig
中的來動態的配置,從資料庫中讀取,或利用依賴方式動態生成。
現在我們再來看看
builder
模式的幾個要點:
builder
模式主要用於構建乙個複雜的物件,但這個物件構建的演算法是穩定的,物件中的各個部分經常變化。
builder
模式主要在於應對複雜物件各個部分的頻繁需求變動。但是難以應對演算法的需求變動。這點一定要注意,如果用錯了,會帶來很多不必要的麻煩。
課程中還提到了
.net
中的builder
模式的應用。如:
page
類中的oninit
()等方法的實現。我們在寫乙個
web頁面的時候。他的
codebehind
**都是繼承
system.web.ui.page
基類的。
oninit
()函式是可以重寫的
設計模式讀書筆記之建造者模式 Builder
建造者模式 將複雜物件的建造和表示分離,使同樣的建造過程可以創造出不同細節的產品.建造者模式,聽名字就應該知道和工廠模式一樣,是用來創造物件的。但是建造者和工廠模式的區別就是工廠模式只關注最終的產品,它往往是簡單的呼叫被建立者的建構函式 而建造者更關心細節,它定義了建立乙個複雜物件所需的步驟,而建立...
Java設計模式(五) 建造者模式Builder
我們要建造乙個複雜的產品。比如 神舟飛船 iphone。這個複雜的產品的建立,有這樣乙個問題需要處理 要構建的物件,宇宙飛船 package com.iter.devbox.builder 宇宙飛船 author shearer public class airship public orbital...
設計模式學習筆記(四) 簡單工廠模式
2 典型實現 3 例項 4 簡化 5 主要優點 6 主要缺點 7 適用場景 8 總結 簡單工廠模式不屬於gof23種設計模式之一,但是實際中用途廣泛,並且可以作為學習 工廠方法模式 以及 抽象工廠模式 的基礎。在簡單工廠模式中,工廠類提供乙個建立產品的工廠方法,用於建立各種產品。客戶端只需傳入對應的...