创建型模式之Builder模式及实现

简介:

建造者(Builder)模式

GOF给出的定义为:建造者模式是将一个复杂的对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。

应用场景

使用建造者模式是为了将构建复杂对象的过程和它的部件解耦。注意:是解耦过程和部件。

参与角色

建造者模式通常包括以下这几个角色: 1、Builder:给出一个抽象接口,规范建造者对于生产的产品的各个组成部分的建造。这个接口只是定一个规范,不涉及具体的建造,具体的建造让继承于它的子类(ConcreteBuilder)去实现。
2、ConcreteBuilder:实现builder接口,针对不同的商业逻辑,具体化各对象部分的建造,最后返回一个建造好的产品。
3、Director:导演,顾名思义,负责规范流程之用。在指导中不涉及产品的创建,只负责保证复杂对象各部分被创建或按某种顺序创建。
4、Product:复杂对象。

如何使用建造者模式

首先假设一个复杂对象是由多个部件组成的,Builder模式是把复杂对象的创建和部件的创建分别开来,分别用Builder类和Director类来表示。

首先,需要一个接口,它定义如何创建复杂对象的各个部件:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
public  interface  Builder {
     //创建部件A  比如创建汽车车轮
     void  buildPartA();
     //创建部件B 比如创建汽车方向盘
     void  buildPartB();
     //创建部件C 比如创建汽车发动机
     void  buildPartC();
     
     /**返回最后组装成品结果 (返回最后装配好的汽车)
      * 成品的组装过程不在这里进行,而是转移到下面的Director类中进行
      * 从而实现了解耦过程和部件
      */
     Product getResult();
}

用Director构建最后的复杂对象,而在上面Builder接口中封装的是如何创建一个个部件(复杂对象是由这些部件组成的),
也就是说Director的内容是如何将部件最后组装成成品:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public  class  Director {
 
     private  Builder builder;
     
     public  Director(Builder builder){
         this .builder=builder;
     }
     
     /** 将部件partA partB partC最后组成复杂对象 */
     public  void  construct(){
         builder.buildPartA();
         builder.buildPartB();
         builder.buildPartC();
     }
}

  

Builder的具体实现ConcreteBuilder:
通过具体完成接口Builder来构建或装配产品的部件;
定义并明确它所要创建的是什么具体东西;
提供一个可以重新获取产品的接口。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
public  class  ConcreteBuilder  implements  Builder{
     
     private  Product product;
 
     @Override
     public  void  buildPartA() {
         /**
          * 在此创建出部件
          * 把partA传递给product
          */
         PartA partA= new  PartA();
         product.setPartA(partA);
     }
 
     @Override
     public  void  buildPartB() {
         PartB partB= new  PartB();
         product.setPartB(partB);
     }
 
     @Override
     public  void  buildPartC() {
         PartC partC= new  PartC();
         product.setPartC(partC);
     }
 
     @Override
     public  Product getResult() {
         return  product;
     }
     
 
}

 

复杂对象产品:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
public  class  Product {
 
     private  PartA partA;
     private  PartB partB;
     private  PartC partC;
     
     public  PartA getPartA() {
         return  partA;
     }
     public  void  setPartA(PartA partA) {
         this .partA = partA;
     }
     public  PartB getPartB() {
         return  partB;
     }
     public  void  setPartB(PartB partB) {
         this .partB = partB;
     }
     public  PartC getPartC() {
         return  partC;
     }
     public  void  setPartC(PartC partC) {
         this .partC = partC;
     }
 
}

  

复杂对象的部件:

1
2
3
public  class  PartA {
 
}

  

1
2
3
public  class  PartB {
 
}

  

1
2
3
public  class  PartC {
 
}

  

如何应用:

1
2
3
4
5
6
7
8
9
10
11
12
public  class  Test {
 
     public  static  void  main(){
         
         Builder builder= new  ConcreteBuilder();
         Director director= new  Director(builder);
         director.construct();
         Product product = builder.getResult();
         
         
     }
}

使用建造者模式可以有效的封装变化,在使用建造者模式的场景中,一般产品类和建造者类是比较稳定的,因此,将主要的业务逻辑封装在导演类中对整体而言可以取得比较好的稳定性。
其次,建造者模式很容易进行扩展。如果有新的需求,通过实现一个新的建造者类就可以完成,基本上不用修改之前已经测试通过的代码,因此也就不会对原有功能引入风险。



本文转自邴越博客园博客,原文链接:http://www.cnblogs.com/binyue/p/3726840.html,如需转载请自行联系原作者

相关文章
|
17天前
|
设计模式 安全 Java
构建未来应用:Java设计模式 - 建造者模式(Builder)在现代编程中的应用
【4月更文挑战第7天】建造者模式是提升代码质量的关键,尤其在复杂环境中。它分步骤构建对象,将构建与表示分离,适用于UI构建、数据模型组装、配置文件解析和网络请求构造等场景。最佳实践包括明确构建步骤、提供默认值、支持链式调用和确保线程安全。然而,过多步骤、不一致状态和性能问题是使用时需注意的问题。掌握建造者模式对于现代编程至关重要。
|
8月前
|
设计模式 Java
空对象模式【Java设计模式】
空对象模式【Java设计模式】
31 0
|
11月前
|
设计模式 算法 Java
Java设计模式-建造者模式(Builder)
Java设计模式-建造者模式(Builder)
|
设计模式 算法 程序员
创建型模式 - 建造者模式(Builder Pattern)
创建型模式 - 建造者模式(Builder Pattern)
|
设计模式 Java
设计模式系列3 - builder模式
主要讲解建造者builder模式和实际应用的场景,基于java。
209 0
设计模式系列3 - builder模式
|
设计模式
创建型-Builder
Builder 模式,中文翻译为建造者模式或者构建者模式,也有人叫它生成器模式。 实际上,建造者模式的原理和代码实现非常简单,掌握起来并不难,难点在于应用场景。 直接使用构造函数或者配合 set 方法就能创建对象,为什么还需要建造者模式来创建呢?
155 0
|
设计模式 算法 Java
浅谈JAVA设计模式之——建造者模式(Builder)
将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。
127 0
浅谈JAVA设计模式之——建造者模式(Builder)
|
存储 设计模式 Java
JAVA设计模式(04):创建型-建造模式(Builder)
转载自: http://blog.csdn.net/lovesomnus/article/details/23743049
142 0
JAVA设计模式(04):创建型-建造模式(Builder)