設計模式 建造者模式

2021-10-22 08:44:36 字數 4684 閱讀 1811

有一天,我多個場景需要呼叫某個實體類,但是不同場景下實體類傳入的引數不同,所以就導致我重寫了n個構造方法 ~ 無力吐槽,所以就想到了建造者模式 ~

設計模式共23種,分為三種型別基礎概念

建造者模式,有人也稱其為構造者模式,主要解決了乙個類複雜多變的構造引數問題 ~

什麼是複雜構造引數?如下就是咯

/**

* desc 家庭成員組成

*/class

familymember

public

familymember

(string father,

string mother)

public

familymember

(string father,

string mother,

string me)

public

familymember

(string father,

string mother,

string me,

string brother)

public

familymember

(string father,

string mother,

string me,

string brother,

string sister)

}

建造者模式如大多數設計模式一樣,他的組成往往也有抽象類和具體實現類,主要區別在於適應場景的不同,其角色劃分如下 ~關於建造者模式的倆種實現方式該方式主要是便於新手理解角色劃分、角色職責與模式實現的過程(感覺部分思想和策略模式蠻像的,針對不同的需求傳入不同的具體物件,只是具體物件內加入了必有的方法組成,然後重寫了可選方法)

該方式不同於傳統方式,更適合專案中使用,而且在各類語言中該寫法也很常見,為主流寫法,主要特色在於動態生成具體建造者,而且語法相對靈活多變,容易讓人寫的上癮

感悟:單純角色劃分和實現的話與策略模式有相似之處 ~

我的栗子

生活中我們每個家庭的組成大多都不相同,但是不論怎樣我們的家庭成員中至少擁有父親、母親和自己,至於有沒有兄弟姐妹那麼針對不同的家庭也就有了不同的組成,所以我們的產品類中有必傳引數,也有選傳引數;故我們的產品類就**於此 ~

傳統實現

噓… 個人二次感覺傳統的實現方式和策略模式 還是有丟丟像,或許說是設計模式有些思想還是蠻共通的 ~

產品類 - familymember

package

com.example.builderdemo

;/**

* @author mrliu

* @date 2021/2/26

* desc 產品類 - 家庭成員

*/class

familymember

public

string

getmother()

public

void

setmother

(string mother)

public

string

getfather()

public

void

setfather

(string father)

public

string

getme()

public

void

setme

(string me)

public

string

getbrother()

public

void

setbrother

(string brother)

public

string

getsister()

public

void

setsister

(string sister)

@override

public

string

tostring()

';}}

抽象建立者 - familybuilder

package

com.example.builderdemo

;/**

* @author mrliu

* @date 2021/2/26

* desc 抽象建造者

*/inte***ce

familybuilder

具體建造者 - jackfamilybuild

package

com.example.builderdemo

;/**

* @author mrliu

* @date 2021/2/26

* desc 具體建造者 - jack家庭組成

*/class

jackfamilybuild

implements

familybuilder

@override

public

void

setbrother()

@override

public

void

setsister()

@override

public

familymember

createfamily()

}

具體建造者 - tomfamilybuilder

package

com.example.builderdemo

;/**

* @author mrliu

* @date 2021/2/26

* desc 具體建造者 - tom家庭組成

*/class

tomfamilybuilder

implements

familybuilder

@override

public

void

setbrother()

@override

public

void

setsister()

@override

public

familymember

createfamily()

}

導演類 - familydirector

package

com.example.builderdemo

;/**

* @author mrliu

* @date 2021/2/26

* desc 導演類

*/class

familydirector

;}

使用場景

package

com.example.builderdemo

;import

;import

android.os.

bundle

;import

android.util.

log;

public

class

mainactivity

extends

}

輸出結果

專案實現

產品類 - familymember

package

com.example.builderdemo

;/**

* @author mrliu

* @date 2021/2/26

* desc 產品類 - 家庭成員

*/class

familymember

@override

public

string

tostring()

';}/**

* 建造者

*/public

static

class

builder

public

builder

setbrother

(string brother)

public

builder

setsister

(string sister)

public

familymember

build()

}}

使用方式

package

com.example.builderdemo

;import

;import

android.os.

bundle

;import

android.util.

log;

public

class

mainactivity

extends

}

輸出結果

設計模式 建造者模式

在gof的23種設計模式中對builder pattern的定義是 將乙個複雜物件的構建與它的表示分離,使得同樣的構建過程可以建立不同的表示。從程式角度來說,就是在基類定義某種事物建立的過程或業務流程,在子類進行重寫或是使用基類方法。這樣建立出來的例項不會因為過程或流程的丟失而使業務失敗。舉例來說,...

設計模式建造者模式

今天看了乙個設計模式。總結下,以免忘了。如何引入建造者模式的呢?作者舉了個例子。建造小人。當然需要 頭,左手,右手,左腳,右腳,軀幹。建造的過程使用 使用類裡面的方法就行了。但是如果需要乙個胖的小人,乙個瘦的小人呢?就需要重新構造乙個胖人類,乙個瘦人類。當然 使用者還需要自己處理構造的過程。這樣 就...

設計模式 建造者模式

定義 將乙個複雜的物件的構建與它的表示分離,是的同樣的構建過程可以建立不同的表示。包括的要素 1 產品類 2 抽象建造者或者介面 3 建造者 4 導演類 建造者模式的優點 首先,建造者模式的封裝很好,使用建造者模式可以有效地封裝變化,注意在使用建造者模式的場景中,一般產品類和建造者介面是比較穩定的,...