简单工厂github
设计模式学习之适配器模式设计模式
设计模式学习之工厂方法模式post
Demo传送门学习
案例:关于导出数据的的应用框架,能够导出成文本格式,XML格式,Excel格式等。对于导出的文件中主要分为如下三个部分: 头文件:主要描述信息是分公司或者门市点编号,导出数据的日期,文本格式中间用逗号分离 文件主体部分:包括表名称,分条描述数据,对于文本格式,表名称独占一行,数据描述一行算一条数据,字段间用逗号分隔 文件尾部:主要是输入人。ui
下面为了突出生成器模式,咱们先用通常的方法来解决:设计
首先来定义header,data,footer的数据源3d
以后看下ExportToTxt和ExportToXML的实现
客户端调用
运行结果
从上面的结构能够看出,导出Txt或者XML都须要拼接头,主体和尾部内容,完了会输出成为文件,对于不一样的输出格式,步骤都是同样的,可是以上述方法存在如下问题:
1.重复处理步骤 2.不利于扩展其余格式的文件
理想中的状态应该是构建每种格式的数据文件处理过程和具体的实现步骤应该是分开的,这样能够很好地切换不一样的文件格式,那么这样该如何实现呢?下面就进入生成器模式的学习。
定义
将一个复杂对象的构建和它的表示分离,使得一样的构建过程能够建立不一样的表示
生成器模式的结构类图
对于上图中的结构元素的功能说明:
针对案例,用生成器模式来写,具体以下:
具体步骤以下:
1.规定协议规范,也就是builder
2.实现Builder的具体产品,这里分为TxtBuilder,XMLBuilder
3.组合类,也就是Director,主要是组装各个部件
4.客户端调用
从上述已经能够很清楚的明白生成器的实现结构和模式,主要就是对同一个构建过程,配置不一样的生成器实现,就会生成不一样的表现。
生成器模式有如下优势
松散耦合,将产品的构建和表现彻底分离,将构建过程独立出来,使得构建算法可复用,具体表现能够灵活方便地扩展和切换
能够很容易地改变产品的内部表示
具备更好的复用性
生成器模式的本质就是分离总体构建算法和部件构造,那么使用该模式的场景以下: