设计模式之Builder模式

摘要:
生成器模式侧重于产品的不同组成部分和产品的生产过程;总监负责产品的组装和生产过程的控制,而Buidler负责产品零件的生产。

一、感性认识                                                                                         

二、Builder模式                                                                                     

   1、定义

      一个复杂对象的构建与其表示相分离,使得同样的构建过程可以创建不同的表示。即构建过程相同,但是子部件却不相同。

   2、结构说明

                   设计模式之Builder模式第1张

      Builder:

      创建者接口(也可定义为抽象类),定义创建一个Product对象的所需各个部件的操作

      ConcreteBuilder:

      具体的创建者实现,实现各个部件的创建并负责组装Product对象的各个部件;同时提供一个让用户访问的组装完成的Product对象的方法

      Director:

      导向者,主要用来使用Builder接口以一个统一的过程来构建所需要的Product对象

      Product:

      产品,即被创建的复杂对象,包含各个部件

    创建者模式的主要功能是构建复杂的产品,而且是细化的,分步骤的构建产品,也就是生成器模式重在解决一步一步构造复杂对象的问题。

对象的构建的过程是统一的,固定不变的,变化的部分放到生成器部分了,只要配置不同的生成器,那么同样的构建过程,就能构建出不同的产品表示来。

或者说创建者模式的重心在于分离构建算法和具体的构造实现,从而使得构建算法可以重用,具体的构造实现可以很方便的扩展和切换,从而可以灵活的组合来构造出不同的产品对象。

     创建者模式分成两个很重要的部分:

  • Builder接口,定义了如何构建各个部件,也就是知道每个部件功能如何实现,以及如何将这些部件装配到产品中去;
  • Director,Director是知道如何组合来构建产品,也就是说Director负责整体的构建算法,而且通常是分步骤的来执行。

不管如何变化,Builder模式都存在这么两个部分,一个部分是部件构造和产品装配,另一个部分是整体构建的算法

在生成器模式中,强调的是固定整体构建的算法,而灵活扩展和切换部件的具体构造和产品装配的方式,所以要严格区分这两个部分。由于一个复杂对象的单个属性会发生改变(如:智能手机使用的屏幕可能是不同厂家的),但是这个复杂对象的构建过程却不会发生改变。

在Director实现整体构建算法的时候,遇到需要创建和组合具体部件的时候,就会把这些功能通过委托,交给Builder去完成。

    Builder模式注重的是某个产品由不同的部件组成和产品的生产过程;

    Director负责产品的组装,控制生产过程而Buidler是负责产品的部件生产的。这样就可以达到“部件”和“过程”的解耦。

    Buidler模式通俗的表达通过相同的构建过程生产不同的表示。

   3、创建者模式使用

     在使用创建者模式的时,让客户端创造Director,在Director里面封装整体构建算法,然后让Director去调用Builder,让Builder来封装具体部件的构建功能。

   4、创建者模式的调用顺序

     

三、Builder模式优缺点                                                                            

 1、松散耦合

   可以用同一个构建算法,构建出表现上完全不同的产品,实现产品构建和产品表现上的分离。

 2、更好的复用行

   创建者模式实现了构建算法和具体产品实现的分离。

 3、更容易改变的产品的内部表示

   由于Builder对象只是提供接口给Director使用,那么具体的部件创建和装配方式是被Builder接口隐藏了的,Director并不知道这些具体的实现细节。因此,要想改变产品的内部表示,只需要切换Builder的具体实现即可

四、总结                                                                                               

 1、创建者模式的本质

   分离对象的构建算法和部件构造。

 2、创建者模式的使用场景

  •  同一个构建过程有不同的表示
  • 创建对象的算法,独立于该对象的组成部分以及它们的装配方式时

 为什么有不同构造器?为什么不使用JavaBean使用的Set方法呢?

因为构造过程被分配到了几个调用中,在构造过程中JavaBean可能处于不一致状态。类无法仅仅通过检验构造器参数的有效性来保证一致性。

我们不能控制类的使用者按照一定顺利来调用不同参数的Set方法,再在最后一个set方法中做校验吧。(毕竟这样做不太合适)

因此比较合适的方法是根据不同的需要创建不同的构造器。

参考:http://si shu ok.com/forum/blogPost/list/5086.html

由于本人经验有限,文章中难免会有错误,请浏览文章的您指正或有不同的观点共同探讨!

免责声明:文章转载自《设计模式之Builder模式》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇AutoCAD利用VBA宏绘制直线vue路由跳转页面的几种方式及其区别下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Scala核心编程_第06章 面向对象编程(基础部分)

面向对象的Scala Java是面向对象的编程语言,由于历史原因,Java中还存在着非面向对象的内容:基本类型 ,null,静态方法等。 Scala语言来自于Java,所以天生就是面向对象的语言,而且Scala是纯粹的面向对象的语言,即在Scala中,一切皆为对象。 如何定义类 基本语法 [修饰符] class 类名 { 类体 } 注意: scala语法中...

《JavaScript面向对象编程指南》

第一章、引言 1.5 面向对象的程序设计常用概念 对象(名词):是指“事物”在程序设计语言中的表现形式。 这里的事物可以是任何东西,我们可以看到它们具有某些明确特征,能执行某些动作。 这些对象特征就叫做属性(形容词),动作称之为方法(动词)。 类:实际上就是对象的设计蓝图或制作配方。类更多的是一种模板,而对象就是在这些模版的基础上被创建出来的。 封装:主要...

Java 面向对象(六)类的成员 之 构造器(构造方法)

一、构造器   构造器又称构造方法,是为了创建对象和初始化对象所产生的。 二、构造器的特征   1、它具有与类相同的名称。   2、它不声明返回值类型。(与声明为 void 不同)   3、不能与 static、final、synchronized、abstract、native 修饰,不能有 return 返回值; 三、构造器的作用   作用:     ...

2020前端面试题常问集锦

以下为常备面试题集锦,面好多家公司大都问的如此(后续更新补);还有一些算法和手写代码后面整理; js陈述类型1、Es6的class和构造函数的区别: class xx { }(1)不存在变量提升(2)方法默认是不可枚举的,class所有方法没有原型对象prototype也没有构造器不能用new来调用; 2、普通函数和箭头函数的区别?(1)this指向不...

SpringBoot 构造器注入、Setter方法注入和Field注入对比

0. 引入 今天在看项目代码的时候发现在依赖注入的时候使用了构造器注入,之前使用过 Field 注入和 Setter 方法注入,对构造器注入不是很了解。经过查阅资料看到,Spring 推荐使用构造器注入的方式,下面介绍构造器注入到底有什么玄机。 1. 常见的三种注解注入方式对比 Field 注入 @Controller public class Hello...

通过实例学习C#开发中的泛型

C#中所谓泛型:即通过参数化类型来实现在同一份代码上操作多种数据类型。泛型编程是一种编程范式,它利用“参数化类型”将类型抽象化,从而实现更为灵活的复用。   C#泛型赋予了代码更强的类型安全,更好的复用,更高的效率,更清晰的约束。   C#泛型机制简介   C#泛型能力由CLR在运行时支持,区别于C++的编译时模板机制,和java的编译时的“搽拭法”。这...