设计模式学习之生成器模式

UML结构类图的经常使用画法git

简单工厂github

设计模式学习以外观模式算法

设计模式学习之适配器模式设计模式

设计模式学习之单例模式框架

设计模式学习之工厂方法模式post

Demo传送门学习

案例:关于导出数据的的应用框架,能够导出成文本格式,XML格式,Excel格式等。对于导出的文件中主要分为如下三个部分: 头文件:主要描述信息是分公司或者门市点编号,导出数据的日期,文本格式中间用逗号分离 文件主体部分:包括表名称,分条描述数据,对于文本格式,表名称独占一行,数据描述一行算一条数据,字段间用逗号分隔 文件尾部:主要是输入人。ui

下面为了突出生成器模式,咱们先用通常的方法来解决:设计

1.通常方法

首先来定义header,data,footer的数据源3d

以后看下ExportToTxt和ExportToXML的实现

客户端调用

运行结果

从上面的结构能够看出,导出Txt或者XML都须要拼接头,主体和尾部内容,完了会输出成为文件,对于不一样的输出格式,步骤都是同样的,可是以上述方法存在如下问题:

1.重复处理步骤 2.不利于扩展其余格式的文件

理想中的状态应该是构建每种格式的数据文件处理过程和具体的实现步骤应该是分开的,这样能够很好地切换不一样的文件格式,那么这样该如何实现呢?下面就进入生成器模式的学习。

2.认识生成器模式

定义

将一个复杂对象的构建和它的表示分离,使得一样的构建过程能够建立不一样的表示

生成器模式的结构类图

对于上图中的结构元素的功能说明:

  • Builder:生成器接口,定义建立一个Product对象所需的各个部件的操做
  • ConcreteBuilder:具体生成器的实现,实现各个部件的建立,并负责组装Product对象的各个部件,同时提供一个获取组装完成后的产品对象的方法。
  • Director:指导者,主要用来使用Builder接口,以一个统一的过程来构建所须要的Product对象
  • Product:产品,表示被生成器构建的复杂对象,包含多个部件

针对案例,用生成器模式来写,具体以下:

具体步骤以下:

1.规定协议规范,也就是builder

2.实现Builder的具体产品,这里分为TxtBuilder,XMLBuilder

3.组合类,也就是Director,主要是组装各个部件

4.客户端调用

从上述已经能够很清楚的明白生成器的实现结构和模式,主要就是对同一个构建过程,配置不一样的生成器实现,就会生成不一样的表现。

生成器模式有如下优势

  • 松散耦合,将产品的构建和表现彻底分离,将构建过程独立出来,使得构建算法可复用,具体表现能够灵活方便地扩展和切换

  • 能够很容易地改变产品的内部表示

  • 具备更好的复用性

生成器模式的本质就是分离总体构建算法和部件构造,那么使用该模式的场景以下:

  • 若是建立对象的算法,应该独立于该对象的组成部分以及它们的装配方式时
  • 若是同一个构建过程有着不一样的表示时
相关文章
相关标签/搜索