建造者模式就是java
接口規定了要完成的動做(也就是方法),而後有各個實現類針對這些方法分別進行各自具體的實現。 設計模式
我的理解其與模板模式最主要的區別就是模板模式會有一個以final定義的方法來規定其必需要完成的動做流程,這個流程不容許被其子類所修改。而建造者模式沒有這個約束,只要實現接口規定的方法建便可。ide
也就是說模板模式隱含一個流程性,而建造者模式沒有固定的流程性測試
下邊仍是倉庫揀貨爲例簡單說明建造者模式ui
倉庫揀貨時通常是多張出庫單同時揀貨,那麼通常會根據客戶的狀況有至少兩種揀貨任務與揀貨列表的生成方式。設計
一個是合併揀貨。全部客戶(X,Y,Z)要揀的A品一共3箱4盒,那就可能生成兩個揀貨列表(一個3箱,一個4盒)和一個揀貨任務(a人員去同時揀這兩個列表指定的SKU)blog
另外一個是分別揀貨,全部客戶(X,Y,Z)對要揀的A品可能生成了4個揀貨列表(X客戶1箱,Y客戶1箱,Z客戶1箱,Z還有4盒)和2個揀貨任務(a人員在整貨區揀全部的整箱,b人員在散貨區揀散盒)接口
那麼在實際生成時就能夠先定義一個統一的接口get
package builder;it
import java.util.List;
import bean.PickDoc;
import bean.PickList;
import bean.PickTask;
/**
*/
public interface IPickTask {
//計算要揀貨的SKU列表
public List<PickList> getPickList(PickDoc doc);
//計算拆分的揀貨任務
public List<PickTask> getPickList(List<PickList> list);
}
而後分別去作兩個針對合併和非合併揀貨的生成任務與列表的具體現實
import java.util.ArrayList;
import java.util.List;
import bean.PickDoc;
import bean.PickList;
import bean.PickTask;
/**
*/
public class SinglePickTask implements IPickTask {
@Override
public List<PickList> getPickList(PickDoc doc) {
// TODO Auto-generated method stub
//List<PickList> list = new ArrayList<PickList>();
System.out.println("生成不合並揀單據揀貨列表");
return null;
}
@Override
public List<PickTask> getPickList(List<PickList> list) {
// TODO Auto-generated method stub
System.out.println("生成不合並揀單據揀貨任務列表");
return null;
}
}
package builder;
import java.util.List;
import bean.PickDoc;
import bean.PickList;
import bean.PickTask;
/**
*/
public class UnionPickTask implements IPickTask {
@Override
public List<PickList> getPickList(PickDoc doc) {
// TODO Auto-generated method stub
//List<PickList> list = new ArrayList<PickList>();
System.out.println("生成合並揀單據揀貨列表");
return null;
}
@Override
public List<PickTask> getPickList(List<PickList> list) {
// TODO Auto-generated method stub
System.out.println("生成合並揀單據揀貨任務列表");
return null;
}
}
而後進行實際的調用測試