设计形式-建造者模式(builder pattern)
设计模式----建造者模式(builder pattern)
CarModel.java代码如下:
BenzModel.java代码如下:
BMWModel.java代码如下:
CarBuilder.java代码如下:
BenzBuilder.java代码如下:
BMWBuilder.java代码如下:
Director.java代码如下:
Client.java代码如下:
运行结果如下:
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================= 宝马启动!