有一天,我多個場景需要呼叫某個實體類,但是不同場景下實體類傳入的引數不同,所以就導致我重寫了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 導演類 建造者模式的優點 首先,建造者模式的封裝很好,使用建造者模式可以有效地封裝變化,注意在使用建造者模式的場景中,一般產品類和建造者介面是比較穩定的,...