作為創建型的模式,肯定是創建對象等時候用的.
聯系到實際,就是一個javaBean 如果想獲取一個完整的對象, 需要為屬性挨個賦值.
這樣如果連續創建多個對象的時候, 重復代碼 及代碼量明顯太多了
這時候就應該抽象出來一個 創建對象的接口,或者抽象類 每一類對象一個實現類.
在創建一個控制類. 里面調用接口的每一個方法, 同時返回創建好的對象.
eg: 手機套餐 多種套餐: 套餐包含 通話時間 和流量
javaBean :
public Class SJtc {
String thsj;// 通話時間
String ll; 流量
get();
set();
}
正常如果構建套餐. 直接 Sjtc sjtc = new Sjtc(); sjtc.setThsj()... 這樣寫
接下來換一個實現方式:
public abstrac class SjcBuilder {
Sjtc sjtc = new Sjtc();
abstract void setThsj();
abstract void setLl();
getSJtc{
return this.sjtc;
}
}
// 具體套餐實現類:
public ASjtc extends SjcBuilder {
void setThsj(){
sjtc.setThsj("123123");
}
void setLl(){
sjtc.setLl("123123");
}
}
再寫一個控制類調用 抽象類所有方法;
puclic class control{
SjcBuilder builder;
public control(buider){
this.builder = builder;
}
Sjrc getTc(){
builder.setThsj();
builder.setLl();
return builder;
}
}
這樣調用的時候 這樣就好了
control control = new control(new ASjtc());
control.getTc();
調用者不用關心 a套餐都需要什么?
把抽象類 換成接口是一樣的. 創建對象可以放在builde里面.
但是注意 使用完之后置空
public void createDoppelganger(String name){ doppelganger = new Doppelganger(name); } public Doppelganger getDoppelganger(){ try { return doppelganger; }finally{ doppelganger = null; } }
總體而言 建造者模式 跟工廠模式相比, 多了一個控制類, 用來控制對象的創建. 同時建造者模式 是關注的創建的過程.為了減少中間創建對象代碼
在實際工作中 完全是有利用價值的,但是因為例子中 各個實現類的參數都是已知的. 在實際中可能是變化的, 這樣可以在java bean加一個方法.來處理這些,只要規則一置就好了