建造者模式(Builder)定义:将一个复杂对象的构造与其表示分离,使同样的构造过程可以创建不同的表示。它将一个复杂的对象分解为多个简单对象,然后一步一步构建这个对象。所构造的对象的组成部分(数量、顺序)不变,而每一个组成部分的具体内容是可变的。
建造者模式的优点:
1、各个具体的建造者相互独立。
2、调用者不需要知道所创建的对象的内部细节。
但是使用建造这模式,必须满足所创建的对象的“各组成部分相同”,这个前提条件。
抽象建造者及其实现类:
1 public abstract class Builder { 2 protected Product product = new Product(); 3 4 public abstract void buildPartA(); 5 6 public abstract void buildPartB(); 7 8 public abstract void buildPartC(); 9 10 public Product getResult() { 11 return product; 12 } 13 } 14 15 public class ConcreteBuilderA extends Builder { 16 @Override 17 public void buildPartA() { 18 // TODO Auto-generated method stub 19 product.setPartA("A->A"); 20 } 21 22 @Override 23 public void buildPartB() { 24 // TODO Auto-generated method stub 25 product.setPartB("A->B"); 26 } 27 28 @Override 29 public void buildPartC() { 30 // TODO Auto-generated method stub 31 product.setPartC("A->C"); 32 } 33 } 34 35 public class ConcreteBuilderB extends Builder { 36 @Override 37 public void buildPartA() { 38 // TODO Auto-generated method stub 39 product.setPartA("B->A"); 40 } 41 42 @Override 43 public void buildPartB() { 44 // TODO Auto-generated method stub 45 product.setPartB("B->B"); 46 } 47 48 @Override 49 public void buildPartC() { 50 // TODO Auto-generated method stub 51 product.setPartC("B->C"); 52 } 53 }
指挥者(对建造者发出命令的):
1 public class Director { 2 private Builder builder; 3 4 public Director(Builder builder) { 5 this.builder = builder; 6 } 7 //控制建造顺序 8 public Product construct() {
9 this.builder.buildPartA(); 10 this.builder.buildPartB(); 11 this.builder.buildPartC(); 12 return this.builder.getResult(); 13 } 14 }
产品:
1 public class Product { 2 private String partA; 3 private String partB; 4 private String partC; 5 6 public void setPartA(String partA) { 7 this.partA = partA; 8 } 9 10 public void setPartB(String partB) { 11 this.partB = partB; 12 } 13 14 public void setPartC(String partC) { 15 this.partC = partC; 16 } 17 18 public void show() { 19 System.out.println(this.partA + "|" + this.partB + "|" + this.partC); 20 } 21 }
调用者:
1 public class Client { 2 /* 3 * 产品都是由多个部件构成的,各个部件可以灵活选择,但其创建步骤都大同小异 4 */ 5 public static void main(String[] args) { 6 Builder builder; 7 //扩展点 8 builder = new ConcreteBuilderA(); 9 //切换到B 10 //builder = new ConcreteBuilderB(); 11 12 //稳定代码 13 Director director = new Director(builder); 14 15 //创建模式,最终得到的对象 16 Product product = director.construct(); 17 product.show(); 18 } 19 }
执行结果: