建造者模式是创建型模式的一种,有人将建造者模式解释为抽象工厂模式和最后的main方法结合起来得到的,这个解释过于简单
这里举个例子说明,首先一个model模型
public abstract class model {
public ArrayList<String> sequence =new ArrayList<String>();
protected abstract void start();
protected abstract void stop();
public void run() {
//循环一遍,谁在前,就先执行谁
for(int i=0;i<this.sequence.size();i++){
String actionName = this.sequence.get(i);
if(actionName.equalsIgnoreCase("start")){ //如果是start关键字,
this.start(); //开启汽车
}else if(actionName.equalsIgnoreCase("stop")){ //如果是stop关键字
this.stop(); //停止汽车
}
}
}
}
然后一个三轮车模型,一个四轮车模型
public class ThreeModel extends model{
@Override
protected void start() {
// TODO Auto-generated method stub
System.out.println("三轮的启动");
}
@Override
protected void stop() {
// TODO Auto-generated method stub
System.out.println("三轮的关闭");
}
}
public class FourModel extends model{
@Override
protected void start() {
// TODO Auto-generated method stub
System.out.println("四轮的启动");
}
@Override
protected void stop() {
// TODO Auto-generated method stub
System.out.println("四轮的关闭");
}
}
这里是把这里做的复杂些,搞简单点也就两个实体类代替了,这里如果简化了就真成了抽象工厂模式和最后的main方法结合。接下来是建造者
public abstract class carBuilder {
public abstract void setSequence(ArrayList<String> sequence);
public abstract model getModel();
}
public class ThreeCar extends carBuilder {
ThreeModel three = new ThreeModel();
@Override
public void setSequence(ArrayList<String> sequence) {
// TODO Auto-generated method stub
three.sequence = sequence;
}
@Override
public model getModel() {
// TODO Auto-generated method stub
return three;
}
}
public class FourCar extends carBuilder {
FourModel four = new FourModel();
@Override
public void setSequence(ArrayList<String> sequence) {
// TODO Auto-generated method stub
four.sequence = sequence;
}
@Override
public model getModel() {
// TODO Auto-generated method stub
return four;
}
}
这里就是用了抽象工厂类的模式,接下来就是director类
public class Director {
private ArrayList<String> sequence = new ArrayList();
FourCar four = new FourCar();
ThreeCar three = new ThreeCar();
public ThreeModel getThreeModel(){
this.sequence.clear();
this.sequence.add("start");
this.sequence.add("stop");
this.three.setSequence(sequence);
return this.three.three;
}
public FourModel getFourModel(){
this.sequence.clear();
this.sequence.add("stop");
this.sequence.add("start");
this.four.setSequence(sequence);
return this.four.four;
}
}
最后实现调用一下
public class test {
public static void main(String[] args) {
Director d = new Director();
for (int i = 0; i < 10; i++) {
d.getFourModel().run();
}
for (int i = 0; i < 10; i++) {
d.getThreeModel().run();
}
}
}