當建立物件需要傳入多個引數的時候我們通常會根據引數的數量寫不同的構造器,具體如下
public a(int a){}
public a(int a, int b){}
public a(int a, int b, int c){}
根據不同的引數呼叫不同的構造器,但是當引數多了的時候,這種方式不夠靈活,所以會實現動態傳參的方法
public a(){}
public void seta(int a){}
public void setb(int b){}
public void setc(int c){}
這種方式提高了傳參的可讀性,也提高了傳參的靈活性,但是會增加**行數,同時在多執行緒非同步執行的時候導致奇怪的錯誤。
有沒有辦法解決呢?既能提高**可讀性,提高引數靈活性,又不會增加**行數,並保證執行緒安全呢?
構建器模式登場,先看**:
public class a
public builder seta(int a)
public builder setb(int b)
public builder setc(int c)
public a build()
private a(builder builder) {
this.a = builder.a;
this.b = builder.b;
this.c = builder.c;
呼叫構造方法:
a a = new a.builder().seta(1).setb(2).setc(3).build();
這樣就解決了以上所說的問題,但是他的缺點同樣也是存在的,就是:
1.構造器寫起來很複雜
2.建立物件開銷比較大
所以構建器模式只適用於需要傳入很多種情況引數的時候,比如大於4種引數的配合,才比較划算。
而且值得注意的是:最好在類的設計之初就考慮是否使用構建器,否則日後擴充套件起來新構建器舊構造器一起用維護起來不方便。
構建器模式
動機 建立乙個複雜的物件,這個物件各個部分劇烈變化,但是組合到一起卻相對穩定 跟template method很像 public class templatemethodtest private void step2 private void step3 private void step4 pri...
java設計模式 構建者模式
建立者模式和工廠模式有點類似,不過關注點不同。工廠模式往往只關心你要的是什麼,二不關心這個東西的具體細節是什麼。而建立模式則關心的是這個東西的具體細節的建立。拿建立人物來說,我們關心的不僅是建立乙個人物,還要關心他的性別,膚色和名字,則可以使用建立者模式 package builder doc 種族...
構建器模式(Builder)
構建複雜物件 超多的屬性 也可以乙個乙個set 方法 但是根據業務邏輯將屬性分組,採用鏈式呼叫更清晰 介面方式 1.建立某一構造器介面 根據相應複雜物件設計介面方法 2.建立實現類 複雜物件例項,每個方法實現中賦值複雜物件並最終方法retrun 物件 3.呼叫形式 terrainbuilder bu...