设计形式-建造者模式(builder pattern)

设计模式----建造者模式(builder pattern)
CarModel.java代码如下:

package com.designPattern.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();
	
	public final void run(){
		for(int i=0;i<this.sequence.size();i++){
			String actionName = this.sequence.get(i);
			
			if(actionName.equals("start")){
				this.start();
			}else if(actionName.equals("stop")){
				this.stop();
			}else if(actionName.equals("alarm")){
				this.alarm();
			}else if(actionName.equals("engineBoom")){
				this.engineBoom();
			}
		}
	}
	
	public final void setSequence(ArrayList<String> sequence){
		this.sequence = sequence;
	}
}



BenzModel.java代码如下:
package com.designPattern.builder;

public class BenzModel extends CarModel{

	@Override
	protected void start() {
		System.out.println("奔驰启动!");
		
	}

	@Override
	protected void stop() {
		System.out.println("奔驰停车!");
		
	}

	@Override
	protected void alarm() {
		System.out.println("奔驰鸣笛!");
		
	}

	@Override
	protected void engineBoom() {
		System.out.println("奔驰发动机启动!");
		
	}

}



BMWModel.java代码如下:
package com.designPattern.builder;

public class BMWModel extends CarModel{

	@Override
	protected void start() {
		System.out.println("宝马启动!");
		
	}

	@Override
	protected void stop() {
		System.out.println("宝马停车!");
		
	}

	@Override
	protected void alarm() {
		System.out.println("宝马鸣笛!");
		
	}

	@Override
	protected void engineBoom() {
		System.out.println("宝马发动机启动!");
		
	}

}



CarBuilder.java代码如下:


package com.designPattern.builder;

import java.util.ArrayList;

public abstract class CarBuilder {
	
	public abstract void setSequence(ArrayList<String> sequence);
	
	public abstract CarModel getCarModel();

}



BenzBuilder.java代码如下:
package com.designPattern.builder;

import java.util.ArrayList;

/**
 * 建造者
 * @author yangjianzhou
 *
 */
public class BenzBuilder extends CarBuilder{

	private BenzModel benz = new BenzModel();
	
	@Override
	public void setSequence(ArrayList<String> sequence) {
		this.benz.setSequence(sequence);
		
	}

	@Override
	public CarModel getCarModel() {
		
		return this.benz;
	}

}



BMWBuilder.java代码如下:
package com.designPattern.builder;

import java.util.ArrayList;

/**
 * 建造者
 * @author yangjianzhou
 *
 */
public class BMWBuilder extends CarBuilder{

	private BMWModel bmwModel = new BMWModel();
	@Override
	public void setSequence(ArrayList<String> sequence) {
		
		this.bmwModel.setSequence(sequence);
	}

	@Override
	public CarModel getCarModel() {
		
		return this.bmwModel;
	}

}



Director.java代码如下:
package com.designPattern.builder;

import java.util.ArrayList;

/**
 * 设置车子的启动顺序
 * @author yangjianzhou
 *
 */
public class Director {
	
	private ArrayList<String> sequence = new ArrayList<String>();
	
	private BenzBuilder benzBuilder = new BenzBuilder();
	
	private BMWBuilder bmwBuilder = new BMWBuilder();
	
	public BenzModel getABenzModel(){
		
		this.sequence.clear();
		this.sequence.add("start");
		this.sequence.add("stop");
		
		this.benzBuilder.setSequence(sequence);
		return (BenzModel)this.benzBuilder.getCarModel();
	}
	
	public BenzModel getBBenzModel(){
		
		this.sequence.clear();
		this.sequence.add("engineBoom");
		this.sequence.add("start");
		this.sequence.add("stop");
		
		this.benzBuilder.setSequence(sequence);
		return (BenzModel)this.benzBuilder.getCarModel();
	}
	
	public BMWModel getCBMWModel(){
		
		this.sequence.clear();
		this.sequence.add("alarm");
		this.sequence.add("start");
		this.sequence.add("stop");
		
		this.bmwBuilder.setSequence(sequence);
		return (BMWModel)this.bmwBuilder.getCarModel();
	}
	
	public BMWModel getDBMWModel(){
		
		this.sequence.clear();
		this.sequence.add("start");
		
		this.bmwBuilder.setSequence(sequence);
		return (BMWModel)this.bmwBuilder.getCarModel();
	}

}



Client.java代码如下:
package com.designPattern.builder;

public class Client {
	
	public static void main(String[] args) {
		Director director = new Director();
		
		System.out.println("==============奔驰A=================");
			director.getABenzModel().run();
		System.out.println("==============奔驰B=================");
			director.getBBenzModel().run();
		System.out.println("==============宝马C=================");
			director.getCBMWModel().run();
		System.out.println("==============宝马D=================");
			director.getDBMWModel().run();
			
	}

}



运行结果如下:
==============奔驰A=================
奔驰启动!
奔驰停车!
==============奔驰B=================
奔驰发动机启动!
奔驰启动!
奔驰停车!
==============宝马C=================
宝马鸣笛!
宝马启动!
宝马停车!
==============宝马D=================
宝马启动!