bulder模式是一步步建立乙個複雜物件的建立模型,它允許使用者在不知道內部構建細節
的情況下可以更精細地控制物件的構造流程該模式為將構建複雜物件的過程和它的部件
解耦,使得構建過程和部件的表示隔離開來。
將乙個負責物件的構建與它的表示分離,使得同樣的構建過程可以建立不同的表示
3.1 相同的方法,不同的執行順序,產生不同的事件結果
3.2 多個部件或零件,都可以裝配到乙個物件中,但是產生的執行結果又不相同
3.3 產品類非常複雜,或者產品類中的呼叫順序不同產生了得作用,這個時候需要使用
builder模式
3.4 當初始化乙個物件特別的複雜,如引數多,且很多引數都具有預設值時
例如車的組裝過程比較複雜,並且組裝順序是不固定的,下面我們以車的組裝為例子簡化
構建輪胎、車體形狀、牌子等3個部分然後通過director和具體的builder類來構建車。
1.
/**
* 車的抽象類,即product角色
* created by teaphy
* 2016/3/12.
*/public abstract class car
// 設定輪胎
public void settire(string tire)
// 設定車體
public void setcabin(string cabin)
// 設定車牌
public abstract void setbrand();
@override
public string tostring() ';
} }
2.
/**
* 具體的car類 bmwcar
* created by teaphy
* 2016/3/12.
*/public class bmwcar extends car
public void setbrand()
}
3.
/**
* 抽象builder類
* created by teaphy
* 2016/3/12.
*/public abstract class builder
4.
/**
* 具體的builder類 bwmcarbuilder
* created by teaphy
* 2016/3/12.
*/public class bwmcarbuilder extends builder
public void buildcabin(string cabin)
public void buildbrand()
public car create()
}
5.
/**
* director類 負責構造car
* created by teaphy
* 2016/3/12.
*/public class director
public void construct(string tire, string cabin)
}
6.測試類
public class testbuilder
7.輸出結果:car
在上述示例中,通過director類來構建bmwcar物件,而director封裝了構建負責物件的過程,對外隱藏了構建細節。builder和director一起將乙個複雜的物件與它的表示分離,使得同樣的構建建立不同的物件。
在實際開發過程中,director角色經常被忽略,直接是用builder來進行對物件封裝構建,這個builder通常為鏈式呼叫,它的關鍵點在於每個setter方法都返回自身,也就是return this;這樣使得setter方法可以鏈式呼叫
a.
/*** 抽象builder類
* created by teaphy
* 2016/3/12.
*/public abstract class _builder
b. /**
* 具體的builder類 bwmcarbuilder
* created by teaphy
* 2016/3/12.
*/public class buickbuilder extends _builder
public _builder buildcabin(string cabin)
public _builder buildbrand()
public car create() }
c. 測試類
public class testbuilder }
d. 輸出結果:car
設計模式 Builder模式
網路上有人將它定義為 將乙個複雜物件的構建與它的表示分離,使得同樣的構建過程可以建立不同的物件。所以建造者模式適合於乙個具有較多的零件 屬性 的產品 物件 的建立過程。由五個部分構成 1.product concreatebuilder建立該產品的內部表示並定義它的裝配過程。2.builder介面 ...
設計模式 Builder模式
一貫風格,直接上 package created by mingchenchen on 2017 6 14.public class user public void setid string id public string getcountry public void setcountry st...
設計模式 Builder模式
public class person public void setname string name public intgetage public void setage int age public double getheight public void setheight double h...