建造者模式

[转自恩师wanson]

 

优点:

1:在建造者模式中,客户端不必知道产品内部组成的细节,将产品本身与产品的创建过程解耦,使得相同的创建过程可以创建不同产品对象

2:每一个具体建造者都相对独立,而与其他的具体建造者无关,因此可以很方便地替换具体建造者或增加新的具体建造者,用户使用不同的具体建造者即可得到不同的产品对象,符合开闭原则

3:可以更加精细地控制产品的创建过程

缺点:

1:建造者模式所创建的产品一般具有较多的共同点,其组成部分相似,如果产品之间的差异性很大,例如很多组成部分都不相同,不适合使用建造者模式,因此适用范围受到一定的限制

2:如果产品的内部变化复杂,可能会导致需要定义很多具体建造者类来实现这种变化,导致系统变得很庞大,增加系统的理解难度和运行成本。

使用环境:

1:需要生成的产品对象有复杂的内部结构,这些产品对象通常包含多个成员变量

2:需要生成的产品对象的属性相互依赖,需要指定其生成顺序

3:对象创建过程独立于创建该对象的类

4:隔离复杂对象的创建和使用,并使得相同的创建过程可以创建不同的产品

 

 1 package com.shanghai.wangson.designpattern;
 2 
 3 /**
 4  * 抽象建造者
 5  */
 6 abstract class Builder {
 7     /**
 8      * 创建产品对象
 9      */
10     protected Product product=new Product();
11     public abstract void builderPartA();
12     public abstract void builderPartB();
13     public abstract void builderPartC();
14     /**
15      * 返回产品对象
16      */
17     public Product getResult(){
18         return product;
19     }
20 
21 }

 

 

 1 package com.shanghai.wangson.designpattern;
 2 
 3 /**
 4  * 具体建造者
 5  */
 6 public class ConcreteBuilder extends Builder {
 7     @Override
 8     public void builderPartA() {
 9         product.setPartA("建造partA");
10     }
11 
12     @Override
13     public void builderPartB() {
14         product.setPartB("建造partB");
15     }
16 
17     @Override
18     public void builderPartC() {
19         product.setPartC("建造partC");
20     }
21 }

 

 

 1 package com.shanghai.wangson.designpattern;
 2 
 3 /**
 4  * 指挥者
 5  */
 6 public class Director {
 7     private Builder builder;
 8 
 9     public Director(Builder builder) {
10         this.builder = builder;
11     }
12     /**
13      * 产品构建与组装方法
14      */
15     public Product construct(){
16         builder.builderPartA();
17         builder.builderPartB();
18         builder.builderPartC();
19         return builder.getResult();
20     }
21 }

 

 

 1 package com.shanghai.wangson.designpattern;
 2 
 3 /**
 4  * 产品角色
 5  */
 6 public class Product {
 7     private String partA;
 8     private String partB;
 9     private String partC;
10 
11     public void setPartA(String partA) {
12         this.partA = partA;
13     }
14 
15     public void setPartB(String partB) {
16         this.partB = partB;
17     }
18 
19     public void setPartC(String partC) {
20         this.partC = partC;
21     }
22     public void show(){
23         /**
24          * 显示产品的特性
25          */
26         System.out.println("超微牌子");
27     }
28 }

 

 

 1 package com.shanghai.wangson.designpattern;
 2 
 3 public class Driver {
 4     public static void main(String[] args) {
 5         Builder builder=new ConcreteBuilder();
 6         Director director=new Director(builder);
 7         Product product=director.construct();
 8         product.show();
 9     }
10 }

 

posted @ 2019-01-11 19:55  wq9  阅读(142)  评论(0编辑  收藏  举报