
1、CarModel.java
package com.ssm.cts.pattern.builder;
import java.util.ArrayList;
public abstract class CarModel {
// 执行顺序
private ArrayList<String> sequence = new ArrayList<String>();
// 启动
protected abstract void start();
// 停止
protected abstract void stop();
// 喇叭声音
protected abstract void alarm();
// 引擎声音
protected abstract void engineBoom();
// 运行
final public void run() {
for (int i = 0; i < this.sequence.size(); i++) {
String actionName = this.sequence.get(i);
if (actionName.equalsIgnoreCase("start")) {
this.start();
} else if (actionName.equalsIgnoreCase("stop")) {
this.stop();
} else if (actionName.equalsIgnoreCase("alarm")) {
this.alarm();
} else if (actionName.equalsIgnoreCase("engine boom")) {
this.engineBoom();
}
}
}
final public void setSequence(ArrayList<String> sequence) {
this.sequence = sequence;
}
}
2、BenzModel.java
package com.ssm.cts.pattern.builder;
public class BenzModel extends CarModel {
@Override
protected void alarm() {
System.out.println("奔驰:喇叭声音...");
}
@Override
protected void engineBoom() {
System.out.println("奔驰:引擎音声音...");
}
@Override
protected void start() {
System.out.println("奔驰:启动...");
}
@Override
protected void stop() {
System.out.println("奔驰:停止");
}
}
3、BMWModel.java
package com.ssm.cts.pattern.builder;
public class BMWModel extends CarModel {
@Override
protected void alarm() {
System.out.println("宝马:喇叭声音...");
}
@Override
protected void engineBoom() {
System.out.println("宝马:引擎音声音...");
}
@Override
protected void start() {
System.out.println("宝马:启动...");
}
@Override
protected void stop() {
System.out.println("宝马:停止");
}
}
4、BenzBuilder.java
package com.ssm.cts.pattern.builder;
import java.util.ArrayList;
public class BenzBuilder extends CarBuilder {
private BenzModel benz = new BenzModel();
@Override
public CarModel getCarModel() {
return this.benz;
}
@Override
public void setSequence(ArrayList<String> sequence) {
this.benz.setSequence(sequence);
}
}
5、BMWBuilder.java
package com.ssm.cts.pattern.builder;
import java.util.ArrayList;
public class BMWBuilder extends CarBuilder {
private BMWModel bmw = new BMWModel();
@Override
public CarModel getCarModel() {
return this.bmw;
}
@Override
public void setSequence(ArrayList<String> sequence) {
this.bmw.setSequence(sequence);
}
}
6、CarBuilder.java
package com.ssm.cts.pattern.builder;
import java.util.ArrayList;
public abstract class CarBuilder {
// 提供组装顺序,建造一个模型。
public abstract void setSequence(ArrayList<String> sequence);
// 获取模型
public abstract CarModel getCarModel();
}
7、Director.java
package com.ssm.cts.pattern.builder;
import java.util.ArrayList;
public class Director {
@SuppressWarnings({ "unchecked", "rawtypes" })
private ArrayList<String> sequence = new ArrayList();
private BenzBuilder benzBuilder = new BenzBuilder();
private BMWBuilder bmwBuilder = new BMWBuilder();
// A类型的奔驰车
public BenzModel getBenzModelA() {
// 清理场景
this.sequence.clear();
this.sequence.add("start");
this.sequence.add("stop");
this.benzBuilder.setSequence(this.sequence);
return (BenzModel) this.benzBuilder.getCarModel();
}
// C型号的宝马车
public BMWModel getBMWModelC() {
this.sequence.clear();
this.sequence.add("alarm");
this.sequence.add("start");
this.sequence.add("stop");
this.bmwBuilder.setSequence(this.sequence);
return (BMWModel) this.bmwBuilder.getCarModel();
}
}
8、Demo.java
package com.ssm.cts.pattern.builder;
public class Demo {
// 测试
public static void main(String[] args) {
Director director = new Director();
director.getBenzModelA().run();
director.getBMWModelC().run();
}
}