設計模式學習筆記(四) Builder生成器模式

2022-02-19 15:03:14 字數 2835 閱讀 5992

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種設計模式之一,但是實際中用途廣泛,並且可以作為學習 工廠方法模式 以及 抽象工廠模式 的基礎。在簡單工廠模式中,工廠類提供乙個建立產品的工廠方法,用於建立各種產品。客戶端只需傳入對應的...