Java建造(Builder)模式

一、什么是建造模式:

  建造模式可以将一个产品的内部表象与产品的生成过程分割开来,从而使一个建造过程生成具有不同内部表象的产品。客户端不需要知道产品内部的结构和生产过程。

二、建造模式的结构:

  Builder(抽象建造者角色):一个抽象的建造者父类结构,规定产品对象各个组成成分的建造。

  ConcreteBuilder(产品的具体建造者):继承抽象建造者角色,实现建造方法buildPart1()、builderPart2(),完成产品零件实例的创建;返回产品实例的方法retrieveResultProuduct(),一般而言零件数和产品的建造方法数相同。

  Prouduct(产品):具体建造者建造的对象。

  Director(导演者角色):调用具体产品的创建者 ,获取产品对象。

  总之,导演者角色与客户端直接打交道,导演者角色将客户端创建产品的请求划分为对各个零件的建造请求,再将这些请求委托给具体的建造者角色,具体建造者角色生产具体的零件,不被客户端所知。

 1 /**
 2  * 建造者模式产品对象
 3  *
 4  * @author ZhouDX
 5  * @since 2019/3/6 22:02:58
 6  */
 7 public class Product {
 8     /**
 9      * 产品Id
10      */
11     private  String prouductId;
12     /**
13      * 产品价格
14      */
15     private  String price;
16 
17     public String getProuductId() {
18         return prouductId;
19     }
20 
21     public void setProuductId(String prouductId) {
22         this.prouductId = prouductId;
23     }
24 
25     public String getPrice() {
26         return price;
27     }
28 
29     public void setPrice(String price) {
30         this.price = price;
31     }
32 
33     @Override
34     public String toString() {
35         return "Product{" + "prouductId='" + prouductId + '\'' + ", price='" + price + '\'' + '}';
36     }
37 }
Prouduct(产品)
 1 /**
 2  * 建造者模式建造者
 3  *
 4  * @author ZhouDX
 5  * @since 2019/3/6 21:54:40
 6  */
 7 public interface Builder {
 8     /**
 9      * 建造方法1
10      */
11     public void method1();
12 
13     /**
14      * 建造方法2
15      */
16     public void method2();
17 
18     /**
19      * 返回产品
20      */
21     public Product returnResult();
22 }
Builder(抽象建造者角色)
 1 /**
 2  * @author ZhouDX
 3  * @since 2019/3/6 22:04:22
 4  */
 5 public class ConcreteBuilder implements Builder {
 6     private Product product = new Product();
 7 
 8     @Override
 9     public void method1() {
10         product.setProuductId("10000001");
11     }
12 
13     @Override
14     public void method2() {
15         product.setPrice("100");
16     }
17 
18     @Override
19     public Product returnResult() {
20         return product;
21     }
22 }
ConcreteBuilder(产品的具体建造者)
 1 /**
 2  * @author ZhouDX
 3  * @since 2019/3/6 22:07:41
 4  */
 5 public class Director {
 6     private Builder builder;
 7 
 8     /**
 9      * 各个零件生产,获得完整的对象
10      */
11     public void constructor() {
12         builder = new ConcreteBuilder();
13         builder.method1();
14         builder.method2();
15         builder.returnResult();
16     }
17     public Builder getBuilder() {
18         return builder;
19     }
20 }
Director (导演者对象)
 1 /**
 2  * @author ZhouDX
 3  * @since 2019/3/12 22:45:02
 4  */
 5 public class Client {
 6     public static void main(String[] args) {
 7         Director director = new Director();
 8         director.constructor();
 9         Product product = director.getBuilder().returnResult();
10         System.out.println(product.toString());
11     }
12 }
Client (客户端)

 

 三、建造模式的实质:

  建造模式利用一个导演者对象和具体建造者对象一个一个的建造出所有的零件,从而建造出完整的产品对象。建造者模式将产品的结构和产品的零件建造过程对客户端隐藏起来,把对建造过程的指挥的责任和具体建造者零件的责任分割开来,达到责任划分和封装的目的。

 

posted @ 2019-03-11 22:42  派大小兴  阅读(1391)  评论(0编辑  收藏  举报