设计模式05 建造者模式

建造者模式(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 }

执行结果:

原文地址:https://www.cnblogs.com/asenyang/p/12111029.html