定義
產品由不同零件組裝而成,當傳入不同的組裝順序後,可以獲得不同的產品.
示例
汽車組裝由四個不同的零件完成,分別爲大燈,發動機,輪子,其他.
寶馬A系列和寶馬B系列組裝步驟不同.
奔馳A系列和奔馳B系列組裝步驟不同.
1.抽象產品類
public abstract class CarModel {
//組裝順序列表
private ArrayList<String> sequence = new ArrayList<String>();
final protected void setSequence(ArrayList<String> sequence){
this.sequence = sequence;
}
//遍歷sequence中的執行步驟,依次執行.結合了模板模式
final protected void run(){
for(int i=0; i<sequence.size();i++){
String actionName = sequence.get(i);
if(actionName.equalsIgnoreCase("installLight")){
this.installLight();
}
if(actionName.equalsIgnoreCase("installEngine")){
this.installEngine();
}
if(actionName.equalsIgnoreCase("installWheel")){
this.installWheel();
}
if(actionName.equalsIgnoreCase("installOther")){
this.installOther();
}
}
}
protected abstract void installLight(); //組裝大燈
protected abstract void installEngine(); //組裝發動機
protected abstract void installWheel(); //組裝輪子
protected abstract void installOther(); //組裝其他
}
2.具體產品類
public class BMWModel extends CarModel{
@Override
protected void installLight() {
System.out.println("寶馬組裝大燈!!!");
}
@Override
protected void installEngine() {
System.out.println("寶馬組裝發動機!!!");
}
@Override
protected void installWheel() {
System.out.println("寶馬組裝輪子!!!");
}
@Override
protected void installOther() {
System.out.println("寶馬組裝其他!!!");
}
}
public class BenzModel extends CarModel{
@Override
protected void installLight() {
System.out.println("奔馳組裝大燈!!!");
}
@Override
protected void installEngine() {
System.out.println("奔馳組裝發動機!!!");
}
@Override
protected void installWheel() {
System.out.println("奔馳組裝輪子!!!");
}
@Override
protected void installOther() {
System.out.println("奔馳組裝其他!!!");
}
}
3.抽象建造者
public abstract class CarBuilder {
protected abstract void setSequence(ArrayList<String> sequence);
protected abstract CarModel getCarModel();
}
4.具體建造者
public class BMWBuilder extends CarBuilder{
private BMWModel bmwModel = new BMWModel();
@Override
protected void setSequence(ArrayList<String> sequence) {
bmwModel.setSequence(sequence);
}
@Override
protected CarModel getCarModel() {
return bmwModel;
}
}
public class BenzBuilder extends CarBuilder{
private BenzModel benzModel = new BenzModel();
@Override
protected void setSequence(ArrayList<String> sequence) {
benzModel.setSequence(sequence);
}
@Override
protected CarModel getCarModel() {
return benzModel;
}
}
5.運行
public static void main(String[] args) {
BenzBuilder benzBuilder = new BenzBuilder();
BMWBuilder bmwBuilder = new BMWBuilder();
System.out.println("================奔馳A系列組裝順序爲:");
ArrayList<String> sequenceBenzA = new ArrayList<String>();
sequenceBenzA.add("installLight");
sequenceBenzA.add("installEngine");
sequenceBenzA.add("installWheel");
sequenceBenzA.add("installOther");
benzBuilder.setSequence(sequenceBenzA);
CarModel benzModelA = benzBuilder.getCarModel();
benzModelA.run();
System.out.println("================奔馳B系列組裝順序爲:");
ArrayList<String> sequenceBenzB = new ArrayList<String>();
sequenceBenzB.add("installOther");
sequenceBenzB.add("installEngine");
sequenceBenzB.add("installWheel");
sequenceBenzB.add("installLight");
benzBuilder.setSequence(sequenceBenzA);
CarModel benzModelB = benzBuilder.getCarModel();
benzModelB.run();
System.out.println("================寶馬A系列組裝順序爲:");
ArrayList<String> sequenceBmwA = new ArrayList<String>();
sequenceBmwA.add("installLight");
sequenceBmwA.add("installEngine");
sequenceBmwA.add("installWheel");
sequenceBmwA.add("installOther");
bmwBuilder.setSequence(sequenceBmwA);
CarModel bmwModel = bmwBuilder.getCarModel();
bmwModel.run();
System.out.println("================寶馬B系列組裝順序爲:");
ArrayList<String> sequenceBmwB = new ArrayList<String>();
sequenceBmwB.add("installLight");
sequenceBmwB.add("installWheel");
sequenceBmwB.add("installEngine");
sequenceBmwB.add("installOther");
bmwBuilder.setSequence(sequenceBmwB);
CarModel bmwModelB = bmwBuilder.getCarModel();
bmwModelB.run();
}