package Builder_Pattern;
import java.util.ArrayList;
/**
* 建造者设计模式:将一个复杂对象的构建于它的表示分离,使得同样的构建过程可以创建不同的表示。
* 在建造者设计模式中,有如下的3个角色:
* 1.Product产品类
* 通常是实现了模板方法模式
* 2.Builder抽象建造者
* 规范产品的组建,一般是由子类来实现
* 3.ConcreteBuilder具体建造者
* 实现抽象建造者定义的所有方法,并返回一个组建好的对象
* @author dd
*
*/
public class demo1 {
public static void main(String[] args) {
ArrayList<String> sequence = new ArrayList<String>();
sequence.add("engineBoom");
sequence.add("Start");
sequence.add("stop");
BMWBuilder bmwBuilder = new BMWBuilder();
bmwBuilder.setSequence(sequence);
BMWModel bmw = (BMWModel) bmwBuilder.getCarModel();
bmw.run();
}
}
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<sequence.size();i++){
String actionName = 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("engineBoom")){
this.engineBoom();
}
}
}
final public void setSequence(ArrayList<String> seq){
this.sequence = seq;
}
}
class BMWModel extends CarModel{
@Override
protected void start() {
// TODO Auto-generated method stub
System.out.println("宝马启动");
}
@Override
protected void stop() {
// TODO Auto-generated method stub
System.out.println("宝马停下");
}
@Override
protected void alarm() {
// TODO Auto-generated method stub
System.out.println("宝马鸣笛");
}
@Override
protected void engineBoom() {
// TODO Auto-generated method stub
System.out.println("宝马引擎响");
}
}
abstract class CarBuilder{
public abstract void setSequence(ArrayList<String> sequence);
public abstract CarModel getCarModel();
}
class BMWBuilder extends CarBuilder{
private BMWModel bmw = new BMWModel();
@Override
public void setSequence(ArrayList<String> sequence) {
// TODO Auto-generated method stub
this.bmw.setSequence(sequence);
}
@Override
public CarModel getCarModel() {
// TODO Auto-generated method stub
return this.bmw;
}
}
建造者设计模式
最新推荐文章于 2024-08-27 17:19:33 发布