设计模式二:建造模式(二)

2014-11-24 09:14:53 · 作者: · 浏览: 1
ract void setSequence(ArrayList sequence);

//设置完毕顺序后,就可以直接拿到这个车辆模型
public abstract Car getCar();

}

6.宝马建造者
[java]
package com.bestaone.pattern.builder;

import java.util.ArrayList;

/**
* 具体建造者:实现抽象类定义的所有方法,并且返回一个组件好的对象。
*/
public class BmwBuilder extends CarBuilder {

private Bmw bmw = new Bmw();

@Override
public Car getCar() {
return this.bmw;
}

@Override
public void setSequence(ArrayList sequence) {
this.bmw.setSequence(sequence);
}

}

7.奔驰建造者
[java]
package com.bestaone.pattern.builder;

import java.util.ArrayList;

/**
* 具体建造者:实现抽象类定义的所有方法,并且返回一个组件好的对象。
*/
public class BenzBuilder extends CarBuilder {

private Benz benz = new Benz();

@Override
public Car getCar() {
return this.benz;
}

@Override
public void setSequence(ArrayList sequence) {
this.benz.setSequence(sequence);
}

}

8.导演类
[java]
package com.bestaone.pattern.builder;

import java.util.ArrayList;

/**
* 导演:负责安排已有模块的顺序,然后告诉Builder开始建造
*/
public class Director {

private ArrayList sequence = new ArrayList();

private BenzBuilder benzBuilder = new BenzBuilder();

private BmwBuilder bmwBuilder = new BmwBuilder();

/*
* A类型的奔驰车模型,先start,然后stop,其他什么引擎了,喇叭一概没有
*/
public Benz getABenz() {
//清理场景,这里是一些初级程序员不注意的地方
this.sequence.clear();
//这只ABenzModel的执行顺序
this.sequence.add("start");
this.sequence.add("stop");
//按照顺序返回一个奔驰车
this.benzBuilder.setSequence(this.sequence);
return (Benz) this.benzBuilder.getCar();
}

/*
* B型号的奔驰车模型,是先发动引擎,然后启动,然后停止,没有喇叭
*/
public Benz getBBenz() {
this.sequence.clear();
this.sequence.add("engine boom");
this.sequence.add("start");
this.sequence.add("stop");
this.benzBuilder.setSequence(this.sequence);
return (Benz) this.benzBuilder.getCar();
}

/*
* C型号的宝马车是先按下喇叭(炫耀嘛),然后启动,然后停止
*/
public Bmw getCBmw() {
this.sequence.clear();
this.sequence.add("alarm");
this.sequence.add("start");
this.sequence.add("stop");
this.bmwBuilder.setSequence(this.sequence);
return (Bmw) this.bmwBuilder.getCar();
}

/*
* D类型的宝马车只有一个功能,就是跑,启动起来就跑,永远不停止,牛叉
*/
public Bmw getDBmw() {
this.sequence.clear();
this.sequence.add("start");
this.bmwBuilder.setSequence(this.sequence);
return (Bmw) this.benzBuilder.getCar();
}

/*
* 这里还可以有很多方法,你可以先停止,然后再启动,或者一直停着不动,静态的嘛
* 导演类嘛,按照什么顺序是导演说了算
*/

}