定义: 将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。
特征:
产品类:封装创建对象的具体过程,具体类非抽象类
抽象建造者:将建造的具体过程交予它的子类实现,一般至少两个抽象方法:建造产品,返回产品
建造者:实现抽象类的所有未实现的方法:组件产品、返回组建好的产品
导演类:将产品创建跟客户分离,也是建造者模式的核心,它直接与建造者交互,而不与产品类交互。一般封装程序中易变的部分。
实例:
去电脑城买电脑,你给了价格,让导购帮你组装一台电脑,导购会帮你去几家电脑店看看,每一家组装电脑配置也不同,你选择你满意的。其中:
产品类--电脑 导演类:导购 建造者:N家电脑店 抽象建造者:电脑组装过程抽象
代码如下:
//产品类--电脑 public class Computer { private String name; private String price; private String type; public void shwoComputer(){ System.out.println("名称:"+name); System.out.println("价格:"+price); System.out.println("类型:"+type); } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getPrice() { return price; } public void setPrice(String price) { this.price = price; } public String getType() { return type; } public void setType(String type) { this.type = type; } }
//抽象建造者--组装并返回电脑的过程抽象 public abstract class Builder { public abstract void setComputer(String name,String price,String type); public abstract Computer getComputer(); }
//具体建造者--组装电脑的实体店1 public class BuilderShop1 extends Builder { private Computer computer=new Computer(); @Override public void setComputer(String name1, String price1, String type1) { // TODO Auto-generated method stub computer.setName(name1); computer.setPrice(price1); computer.setType(type1); } @Override public Computer getComputer() { // TODO Auto-generated method stub return computer; } }
//具体建造者--组装电脑的实体店2 public class BuilderShop2 extends Builder { private Computer computer=new Computer(); @Override public void setComputer(String name2, String price2, String type2) { // TODO Auto-generated method stub computer.setName(name2); computer.setPrice(price2); computer.setType(type2); } @Override public Computer getComputer() { // TODO Auto-generated method stub return computer; } }
//导演类--导购,又可以说是建造者的指挥者 public class Director { private Builder builder1=new BuilderShop1(); private Builder builder2=new BuilderShop2(); public Computer getAComputer(){ builder1.setComputer("华硕", "4000", "台式"); return builder1.getComputer(); } public Computer getBComputer(){ builder2.setComputer("戴尔", "4000", "笔记本"); return builder2.getComputer(); } }
public class BuilderPattern { /** * @param args */ public static void main(String[] args) { //进赛格电脑城找一导购 Director director=new Director(); //你说了一个价格,导购去两个店子给你组装了两台电脑 String price="4000"; Computer computer1=director.getAComputer(); computer1.shwoComputer(); Computer computer2=director.getBComputer(); computer2.shwoComputer(); //电脑配置你看完以后,参照你自己的价格标准最终选择一台 //至始至终,你跟导购其实都不关心电脑是如何组装的,你们只关心最后组装完成后的电脑是否符合你的要求 //剩下的事情就是你自己选择一台电脑了 } }说说建造者模式跟工厂模式的异同
两者极为相似,总体上,建造者模式比工厂模式就多了一个“导演类”,其实可以把工厂模式中的暴发户当做导演类理解。
不同的是,工厂模式产品创建过程封装在工厂类中,建造者模式产品创建封装在导演类中,具体创建过程由导演类指挥建造者进行。
总结:产品建造复杂?用工厂模式! 产品建造非常复杂?用建造者模式!!!
建造者模式--介绍、应用及代码,布布扣,bubuko.com
原文:http://blog.csdn.net/lulin27861/article/details/20032891