- 浏览: 134669 次
- 性别:
- 来自: 成都
文章分类
最新评论
-
zfcejb:
你好,这X-gen有源码参考吗
X-gen PPT下载——《研磨设计模式》 实战 -
1927105:
LZ研究过Hibernate4里的监听时间吗?我这边用4.3. ...
Hibernate4实战 之第六部分:基本实现原理 -
hbbbs:
看介绍 挺美的!
X-gen PPT下载——《研磨设计模式》 实战 -
jenmhdn:
即这个是综合运用设计模式的
X-gen PPT下载——《研磨设计模式》 实战 -
jenmhdn:
很值得一看
X-gen PPT下载——《研磨设计模式》 实战
本节课程概览
学习生成器模式
一:初识生成器模式
包括:定义、结构、参考实现
二:体会生成器模式
包括:场景问题、不用模式的解决方案、使用模式的解决方案
三:理解生成器模式
包括:认识生成器模式、生成器模式的实现、
使用生成器模式构建复杂对象、生成器模式的优点
四:思考生成器模式
包括:生成器模式的本质、何时选用
初识生成器模式
定义
将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。
结构和说明
Builder:
生成器接口,定义创建一个Product对象所需的各个部件的操作。
ConcreteBuilder:
具体的生成器实现,实现各个部件的创建,并负责组装Product对象的各个部件,同时还提供一个让用户获取组装完成后的产品对象的方法。
Director:
指导者,也被称为导向者,主要用来使用Builder接口,以一个统一的过程来构建所需要的Product对象。
Product:
产品,表示被生成器构建的复杂对象,包含多个部件。
体会生成器模式
继续导出数据的应用框架
对于导出数据的应用框架,通常对于具体的导出内容和格式是有要求的,假如现在有如下的要求,简单描述一下:
(1)导出的文件,不管什么格式,都分成三个部分,分别是文件头、文件体和文件尾
(2)在文件头部分,需要描述如下信息:分公司或门市点编号、导出数据的日期,对于文本格式,中间用逗号分隔
(3)在文件体部分,需要描述如下信息:表名称、然后分条描述数据。对于文本格式,表名称单独占一行,数据描述一行算一条数据,字段间用逗号分隔。
(4)在文件尾部分,需要描述如下信息:输出人
现在就要来实现上述功能。为了演示简单点,在工厂方法模式里面已经实现的功能,这里就不去重复了,这里只关心如何实现导出文件,而且只实现导出成文本格式和XML格式就可以了,其它的就不去考虑了。
不用模式的解决方案
存在的问题
对于不同的输出格式,处理步骤是一样的,但是具体每步的实现是不一样的。
(1)先拼接文件头的内容
(2)然后拼接文件体的内容
(3)再拼接文件尾的内容
(4)最后把拼接好的内容输出出去成为文件
按照现在的实现方式,就存在如下的问题:
(1)构建每种输出格式的文件内容的时候,都会重复这几个处理步骤,应该提炼出来,形成公共的处理过程
(2)今后可能会有很多不同输出格式的要求,这就需要在处理过程不变的情况下,能方便的切换不同的输出格式的处理
换句话说,也就是构建每种格式的数据文件的处理过程,应该和具体的步骤实现分开,这样就能够复用处理过程,而且能很容易的切换不同的输出格式。
使用模式的解决方案
认识生成器模式
1:生成器模式的功能
生成器模式的主要功能是构建复杂的产品,而且是细化的,分步骤的构建产品,也就是生成器模式重在解决一步一步构造复杂对象的问题。如果光是这么认识生成器模式的功能是不够的。
更为重要的是,这个 构建的过程是统一的,固定不变的,变化的部分放到生成 器部分了,只要配置不同的生成器,那么同样的构建过程,就能构建出不同的产品表示来。
直白点说,生成器模式的重心在于分离构建算法和具体的构造实现,从而使得构建算法可以重用,具体的构造实现可以很方便的扩展和切换,从而可以灵活的组合来构造出不同的产品对象。
2:生成器模式的构成
要特别注意,生成器模式分成两个很重要的部分:
(1)一个部分是Builder接口这边,这边是定义了如何构建各个部件,也就是知道每个部件功能如何实现,以及如何装配这些部件到产品中去;
(2)另外一个部分是Director这边,Director是知道如何组合来构建产品,也就是说Director负责整体的构建算法,而且通常是分步骤的来执行。
不管如何变化,Builder模式都存在这么两个部分,一个部分是部件构造和产品装配,另一个部分是整体构建的算法。认识这点是很重要的,因为在生成器模式中,强调的是固定整体构建的算法,而灵活扩展和切换部件的具体构造和产品装配的方式,所以要严格区分这两个部分。
在Director实现整体构建算法的时候,遇到需要创建和组合具体部件的时候,就会把这些功能通过委托,交给Builder去完成。
3:生成器模式的使用
应用生成器模式的时候,可以让客户端创造Director,在Director里面封装整体构建算法,然后让Director去调用Builder,让Builder来封装具体部件的构建功能,这就跟前面的例子一样。
还有一种退化的情况,就是让客户端和Director融合起来,让客户端直接去操作Builder,就好像是指导者自己想要给自己构建产品一样。
4:生成器模式的调用顺序示意图
生成器模式的实现
(1)生成器的实现
实际上在Builder接口的实现中,每个部件构建的方法里面,除了部件装配外,也可以实现如何具体的创建各个部件对象,也就是说每个方法都可以有两部分功能,一个是创建部件对象,一个是组装部件。
在构建部件的方法里面可以实现选择并创建具体的部件对象,然后再把这个部件对象组装到产品对象中去,这样一来,Builder就可以和工厂方法配合使用了。
再进一步,如果在实现Builder的时候,只有创建对象的功能,而没有组装的功能,那么这个时候的Builder实现跟抽象工厂的实现是类似的。
这种情况下,Builder接口就类似于抽象工厂的接口,Builder的具体实现就类似于具体的工厂,而且Builder接口里面定义的创建各个部件的方法也是有关联的,这些方法是构建一个复杂对象所需要的部件对象,仔细想想,是不是非常类似呢。
(2)指导者的实现
在生成器模式里面,指导者承担的是整体构建算法部分,是相对不变的部分。因此在实现指导者的时候,把变化的部分分离出去是很重要的。
其实指导者分离出去的变化部分,就到了生成器那边,指导者知道整体的构建算法,就是不知道如何具体的创建和装配部件对象。
因此真正的指导者实现,并不仅仅是如同前面示例那样,简单的按照一定顺序调用生成器的方法来生成对象,并没有这么简单。应该是有较为复杂的算法和运算过程,在运算过程中根据需要,才会调用生成器的方法来生成部件对象。
(3)指导者和生成器的交互
在生成器模式里面,指导者和生成器的交互,是通过生成器的那些buildPart方法来完成的。指导者通常会实现比较复杂的算法或者是运算过程,在实际中很可能会有这样的情况:
a:在运行指导者的时候,会按照整体构建算法的步骤进行运算,可能先运行前几步运算,到了某一步骤,需要具体创建某个部件对象了,然后就调用Builder中创建相应部件的方法来创建具体的部件。同时,把前面运算得到的数据传递给Builder,因为在Builder内部实现创建和组装部件的时候,可能会需要这些数据
b:Builder创建完具体的部件对象后,会把创建好的部件对象返回给指导者,指导者继续后续的算法运算,可能会用到已经创建好的对象
c:如此反复下去,直到整个构建算法运行完成,那么最终的产品对象也就创建好了
通过上面的描述,可以看出指导者和生成器是需要交互的,方式就是通过生成器方法的参数和返回值,来回的传递数据。事实上,指导者是通过委托的方式来把功能交给生成器去完成。
(4)返回装配好的产品的方法
在标准的生成器模式里面,在Builder实现里面会提供一个返回装配好的产品的方法,在Builder接口上是没有的。它考虑的是最终的对象一定要通过部件构建和装配,才算真正创建了,而具体干活的就是这个Builder实现,虽然指导者也参与了,但是指导者是不负责具体的部件创建和组装的,因此客户端是从Builder实现里面获取最终装配好的产品。
(5)关于被构建的产品的接口
在使用生成器模式的时候,大多数情况下是不知道最终构建出来的产品是什么样的,所以在标准的生成器模式里面,一般是不需要对产品定义抽象接口的,因为最终构造的产品千差万别,给这些产品定义公共接口几乎是没有意义的。
使用生成器模式构建复杂对象
考虑这样一个实际应用,要创建一个保险合同的对象,里面很多属性的值都有约束,要求创建出来的对象是满足这些约束规则的。约束规则比如:保险合同通常情况下可以和个人签订,也可以和某个公司签订,但是一份保险合同不能同时与个人和公司签订。这个对象里面有很多类似这样的约束,那么该如何来创建这个对象呢?
1:使用Builder模式来构建复杂对象,先不考虑带约束
2:使用Builder模式来构建复杂对象,考虑带约束规则
3:进一步,把构建器对象和被构建对象合并
生成器模式的优缺点
1:松散耦合
2:可以很容易的改变产品的内部表示
3:更好的复用性
思考生成器模式
生成器模式的本质
生成器模式的本质是: 分离整体构建算法和部件构造
何时选用生成器模式
1:如果创建对象的算法,应该独立于该对象的组成部分以及它们的装配方式时
2:如果同一个构建过程有着不同的表示时
配套视频课程:【 http://sishuok.com/product/501】
私塾在线学习网原创内容,转载请注明【http://sishuok.com/forum/blogPost/list/5685.html】
评论
3 楼
389793466
2012-09-09
sky_lichao 写道
高手原来是个美女
全是转载的东西,还是高手?这就是你们的价值取向?
2 楼
a123159521
2012-08-31
目的:buidler复杂对象的构建与它的表示分离,使得同样的构建可以创建不同的表示.
比如对象A代表花,A1代表菊花,A2代表兰花....
菊花的构建有自己的特性,兰花也有自己的特性,比如颜色,气味等.那么即使花的指导者拥有接口颜色,气味.不同花的构建,花的指导者也会根据不同的花,返回不同的颜色,气味.
比如对象A代表花,A1代表菊花,A2代表兰花....
菊花的构建有自己的特性,兰花也有自己的特性,比如颜色,气味等.那么即使花的指导者拥有接口颜色,气味.不同花的构建,花的指导者也会根据不同的花,返回不同的颜色,气味.
1 楼
sky_lichao
2012-08-31
高手原来是个美女
发表评论
-
原型模式——研磨设计模式——跟着cc学设计系列
2012-09-03 12:27 1063本节课程概览 学习抽象工厂模式 一:初识抽象 ... -
抽象工厂模式——研磨设计模式——跟着cc学设计系列
2012-08-29 13:40 823本节课程概览 学 ... -
Hadoop实战-初级部分 之 Hadoop IO
2012-08-25 13:09 1003私塾在线《深入浅出学 Hadoop- 初 ... -
研磨设计模式——跟着cc学设计系列 汇总贴
2012-08-25 13:09 1006课程地址:http://sishuok.com/pr ... -
研磨设计模式——跟着cc学设计系列 汇总贴
2012-08-25 06:32 123课程地址:http://sishuok.com/p ... -
Hadoop实战-初级部分 之 Hadoop IO
2012-08-25 06:31 132私塾在线《深入浅 ... -
相关模式辨析——研磨设计模式——跟着cc学设计系列
2012-08-24 20:02 756本节课程概览 相关模式 关于相关模式的辨 ... -
抽象工厂模式——研磨设计模式——跟着cc学设计系列
2012-08-24 12:11 857本节课程概览 学习抽象工厂模式 一:初识抽象 ... -
单例模式——研磨设计模式——跟着cc学设计系列
2012-08-24 12:10 31本节课程概览 学 ... -
单例模式——研磨设计模式——跟着cc学设计系列
2012-08-24 11:49 7本节课程概览 学习单例模式 一:初识单例模式 ... -
抽象工厂模式——研磨设计模式——跟着cc学设计系列
2012-08-24 11:49 7本节课程概览 学习抽象工厂模式 一:初识抽象 ... -
抽象工厂模式——研磨设计模式——跟着cc学设计系列
2012-08-24 09:37 35本节课程概览 学习抽象工厂模式 一:初识抽象 ... -
抽象工厂模式——研磨设计模式——跟着cc学设计系列
2012-08-24 09:00 48本节课程概览 学习抽象工厂模式 一:初识抽象 ... -
工厂方法模式——研磨设计模式——跟着cc学设计系列
2012-08-23 11:44 957本节课程概览 学 ... -
研磨设计模式——跟着cc学设计系列 汇总贴
2012-08-23 10:09 22PPT和源码下载:http://sishuok.co ... -
简单工厂——研磨设计模式——跟着cc学设计系列
2012-08-22 19:45 1820本节课程概览 学习简单工厂 一:初识简单工厂 ... -
简单工厂——研磨设计模式——跟着cc学设计系列
2012-08-22 16:54 28本节课程概览 学习简单工厂 一:初识简单工厂 ... -
简单工厂——研磨设计模式——跟着cc学设计系列
2012-08-22 16:52 1本节课程概览 学 ... -
设计模式基础——研磨设计模式——跟着cc学设计系列
2012-08-22 14:20 1169提前声明 本视频 ... -
设计模式基础——研磨设计模式——跟着cc学设计系列
2012-08-22 12:33 51提前声明 本视频课程是北京Java私塾原创精品 ...
相关推荐
《研磨设计模式》实战是IT领域中关于软件设计的一份重要资料,它主要探讨了设计模式在实际项目中的应用。设计模式是软件工程中经过长期实践总结出的通用问题解决方案,是解决常见设计问题的经验总结。这份PPT可能是...
《研磨设计模式源码》是一份非常宝贵的资源,它提供了设计模式的实践代码,帮助开发者深入理解并应用这些模式。设计模式是软件工程中经过长期实践总结出来的一套通用解决方案,它们描述了在特定场景下如何解决常见...
《研磨设计模式》完整覆盖GoF讲述的23个设计模式并加以细细研磨。初级内容从基本讲起,包括每个模式的定义、功能、思路、结构、基本实现、运行调用顺序、基本应用示例等,让读者能系统、完整、准确地掌握每个模式,...
《研磨设计模式》完整覆盖GoF讲述的23个设计模式并加以细细研磨。初级内容从基本讲起,包括每个模式的定义、功能、思路、结构、基本实现、运行调用顺序、基本应用示例等,让读者能系统、完整、准确地掌握每个模式,...
《研磨设计模式》这本书是陈臣和王斌两位作者合作的成果,专注于讲解软件设计中的模式应用。设计模式是软件工程中的一种最佳实践,它总结了在特定上下文中解决问题的常见方法,使得开发者可以复用这些解决方案,提高...
《研磨设计模式》完整覆盖GoF讲述的23个设计模式并加以细细研磨。初级内容从基本讲起,包括每个模式的定义、功能、思路、结构、基本实现、运行调用顺序、基本应用示例等,让读者能系统、完整、准确地掌握每个模式,...
《研磨设计模式》完整覆盖GoF讲述的23个设计模式并加以细细研磨。初级内容从基本讲起,包括每个模式的定义、功能、思路、结构、基本实现、运行调用顺序、基本应用示例等,让读者能系统、完整、准确地掌握每个模式,...
“1.1 设计模式是什么 1.1.1 什么是模式 从字面上理解,模,就是模型、模板的意思;式,就是方式、方法的意思。综合起来,所谓模式就是:可以作为模型或模板的方式或方法。... “研磨设计模式”。 iBooks.
内容概述:本视频课程是北京Java私塾原创精品书籍《研磨设计模式》一书的配套学习视频,由《研磨设计模式》的第一作者CC录制 课程目标:全面、系统的掌握GoF设计模式的知识,达到可以在实际项目开发中运用的能力 ...
《研磨设计模式》是由陈臣和王斌合著,由清华大学出版社出版的一本深入探讨设计模式的专业书籍。设计模式是软件工程中的一个重要概念,它代表了在特定上下文中解决问题的常见方法,经过时间和实践的验证,具有很高的...
《研磨设计模式》完整覆盖GoF讲述的23个设计模式并加以细细研磨。初级内容从基本讲起,包括每个模式的定义、功能、思路、结构、基本实现、运行调用顺序、基本应用示例等,让读者能系统、完整、准确地掌握每个模式,...
这个压缩包“研磨设计模式全部源代码”包含了多种设计模式的实现,这些模式可以帮助开发者写出更可维护、可扩展和可复用的代码。下面将详细讲解其中可能包含的一些重要设计模式及其应用。 1. 工厂模式:这是最简单...
《研磨设计模式》这本书是软件开发领域中的经典之作,主要关注的是面向对象设计中的设计模式。设计模式是在特定上下文中解决常见问题的最佳实践,它为开发者提供了在类似情况下重复使用解决方案的模板,有助于提高...
这个“研磨设计模式博文集”显然是一份深入探讨设计模式的资料集合,其中可能包含了对多种设计模式的详细解析、示例代码以及实际应用中的经验分享。在软件开发中,设计模式能够帮助开发者提高代码质量、可读性和可...
研磨设计模式是一本深入探讨软件设计原则与实践的书籍,其讲课PPT为我们提供了丰富的设计模式知识。设计模式是软件工程中经过实践验证的、解决常见问题的模板,是经验丰富的开发人员智慧的结晶。这些模式可以帮助...
这篇“设计模式学习心得(研磨设计模式)”博客及其相关的PDF文档,为我们提供了一个深入理解和应用设计模式的宝贵资源。以下将针对单例模式、工厂方法模式、策略模式、命令模式和桥接模式进行详细讲解。 1. **单例...
第8章 生成器模式(Builder) 第9章 原型模式(Prototype) 第10章 中介者模式(Mediator) 第11章 代理模式(Proxy) 第12章 观察者模式(Observer) 第13章 命令模式(Command) 第14章 迭代器模式(Iterator) ...
研磨设计模式《研磨设计模式》完整覆盖GoF讲述的23个设计模式并加以细细研磨。初级内容从基本讲起,包括每个模式的定义、功能、思路、结构、基本实现、运行调用顺序、基本应用示例等,让读者能系统、完整、准确地...
《研磨设计模式》是一本深入探讨软件设计模式的经典书籍,源代码包含了书中所讲解的各种设计模式的实际应用示例。设计模式是软件工程中的重要概念,它们是经过反复验证、在特定情境下解决常见问题的有效解决方案。...
设计模式(Design Pattern)是一套被反复使用、多数人知晓的、经过分类的、代码设计经验的总结。 使用设计模式的目的:为了代码可重用性、让代码更容易被他人理解、保证代码可靠性。 设计模式使代码编写真正工程化;...