1.定义:
将一个复杂对象的创建与它的表示分离,这样可以使得同样的创建方式来构建不同的表示
2. 建造者模式通常包含4中元素:
1. Builder :抽象的接口,称为抽象建造者,用来规范产品各个组成部分的构建。这个接口之复杂对象组成部分的构建,并不涉及具体对象部件的创建
2. ConcreteBuilder : 实现Builder接口,称为具体建造者,具体化产品各个组成部分的构建。建造完成之后,提供产品的实例
3. Director: 调用建造者对象来构建复杂对象,在指导中涉及产品信息,只保证产品按一定的顺序创建
4. Product: 产品类,即要创建的复杂对象类
3. 示例代码:
产品类Product:
/** * 产品类 * @author zqkj001 * */ public class Product { private String part1; private String part2; public String getPart1() { return part1; } public void setPart1(String part1) { this.part1 = part1; } public String getPart2() { return part2; } public void setPart2(String part2) { this.part2 = part2; } }抽象建造者类Builder:
/** * 抽象建造者类 * @author zqkj001 * */ public interface Builder { /** * 产品零件构造方法1 * */ public void buildPart1(); /** * 产品零件构造方法2 * */ public void buildPart2(); /** * 产品返还 * @return */ public Product getResult(); }具体建造者类 ConcreteBuilder:
/** * 具体建造者类 * @author zqkj001 * */ public class ConcreteBuilder implements Builder{ private Product product=new Product(); @Override public void buildPart1() { product.setPart1("build part1..."); } @Override public void buildPart2() { product.setPart2("build part2..."); } @Override public Product getResult() { return product; } }导演者类 Director:
/** * 导演者类 * @author zqkj001 * */ public class Director { /** * 需要使用的当前建造者对象 */ private Builder builder; public Director(Builder builder) { this.builder = builder; } /** * 产品构造方法,负责调用各个零件构造方法 */ public void buildProduct(){ builder.buildPart1(); builder.buildPart2(); } }测试类:
public class BuilderTest { public static void main(String[] args) { Builder builder=new ConcreteBuilder(); Director director=new Director(builder); director.buildProduct(); Product product=builder.getResult(); System.out.println(product.getPart1()); System.out.println(product.getPart2()); } }
4. 使用建造者模式的场合和好处
a、建造者模式的好处:
1.使用建造者模式可以使客户端不必知道产品内部组成的细节。
2.具体的建造者类之间是相互独立的,对系统的扩展非常有利。
3.由于具体的建造者是独立的,因此可以对建造过程逐步细化,而不对其他的模块产生任何影响。
b、使用场合:
1.创建一些复杂的对象时,这些对象的内部组成构件间的建造顺序是稳定的,但是对象的内部组成构件面临着复杂的变化。
2.要创建的复杂对象的算法,独立于该对象的组成部分,也独立于组成部分的装配方法时。