Separate the construction of a complex object from its representation so that the same construction process can create different representations. java
将一个复杂对象的构建与它的表示分离,使得一样的构建过程能够建立不一样的表示。设计模式
产品的抽象类:
ui
package Builder; import java.util.ArrayList; public abstract class AbstractProduct { //记录执行顺序 private ArrayList<String> part = new ArrayList<String>(); public abstract void doSomething(); public abstract void doOtherthing(); //final,子类不可重写 final public void executive(){ for(int i=0;i<this.part.size();i++){ String actionName = this.part.get(i); if(actionName.equals("doSomething")){ this.doSomething(); } else if(actionName.equals("doOtherthing")){ this.doOtherthing(); } } } //final,子类不可重写 final public void setPart(ArrayList<String> part){ this.part = part; } }
产品的实现类:this
package Builder; public class Product extends AbstractProduct{ //子类具体描述步骤 public void doSomething(){ System.out.println("will do something..."); } public void doOtherthing() { System.out.println("Something has done.Otherthing will be done..."); } }
建造者抽象类:
spa
package Builder; import java.util.ArrayList; public abstract class Builder { //设置产品的不一样部分,以得到不一样的产品 public abstract void setPart(ArrayList<String> part); //建造产品 public abstract Product buildProduct(); }
建造者实现类:
设计
package Builder; import java.util.ArrayList; public class ConcreteProduct extends Builder{ private Product product = new Product(); public void setPart(ArrayList<String> part) { this.product.setPart(part); } public Product buildProduct() { return this.product; } }
导演类:
code
package Builder; import java.util.ArrayList; //对不一样产品的生产顺序再封装,对高层屏蔽细节 public class Director { private ArrayList<String> part = new ArrayList<String>(); private Builder builder = new ConcreteProduct(); public Product getAProduct() { this.part.clear(); this.part.add("doSomething"); this.part.add("doOtherthing"); builder.setPart(part); return builder.buildProduct(); } }
客户端:对象
package Builder; public class Client { public static void main(String[] args) { Director director = new Director(); System.out.println("将产生10个产品"); for(int i=1;i<11;i++){ System.out.println("第" + i + "个产品"); director.getAProduct().executive(); System.out.println(); } } }
说明:get
Product 产品类:一般是实现了模板方法模式,也就是有模板方法和基本方法;产品
Builder 抽象建造者:规范产品的组建,通常是由子类实现。
ConcreteBuilder 具体建造者实现抽象类定义的全部方法,而且返回一个组件好的对象。
Director 导演:负责安排已有模块的顺序,而后告诉Builder开始建造;
1. 良好的封装性
2. 建造者独立,内容可扩展
3. 便于控制细节风险
1.相同的方法,不一样的执行顺序,产生不一样的结果
2.多个部件均可以装配到一个对象中,产生的结果又不相同
3.产品类很是复杂
参考资料:
《设计模式之禅》 秦小波著 第十一章建造者模式
百度百科 建造者模式