研磨设计模式
iteye_3810
这个作者很懒,什么都没留下…
展开
-
研磨设计模式 之 组合模式(Composite) 3——跟着cc学设计系列
15.3 模式讲解15.3.1 认识组合模式(1)组合模式的目的组合模式的目的是:让客户端不再区分操作的是组合对象还是叶子对象,而是以一个统一的方式来操作。实现这个目标的关键之处,是设计一个抽象的组件类,让它可以代表组合对象和叶子对象。这样一来,客户端就不用区分到底是组合对象还是叶子对象了,只需要全部当成组件对象进行统一的操作就可以了。(2)对象树通常,组合模式会...2012-08-22 08:50:15 · 259 阅读 · 0 评论 -
研磨设计模式 之 原型模式(Prototype)3 ——跟着cc学设计系列
9.3 模式讲解9.3.1 认识原型模式(1)原型模式的功能原型模式的功能实际上包含两个方面:一个是通过克隆来创建新的对象实例另一个是为克隆出来的新的对象实例复制原型实例属性的值原型模式要实现的主要功能就是:通过克隆来创建新的对象实例。一般来讲,新创建出来的实例的数据是和原型实例一样的。但是具体如何实现克隆,需要由程序自行实现,原型模式并没有统一的要求...2012-08-08 08:14:55 · 212 阅读 · 0 评论 -
研磨设计模式 之 原型模式(Prototype)2 ——跟着cc学设计系列
9.2 解决方案9.2.1 原型模式来解决用来解决上述问题的一个合理的解决方案就是原型模式。那么什么是原型模式呢?(1)原型模式定义 (2)应用原型模式来解决的思路仔细分析上面的问题,在saveOrder方法里面,已经有了订单接口类型的对象实例,是从外部传入的,但是这里只是知道这个实例对象的种类是订单的接口类型,并不知道其具...2012-08-07 17:54:48 · 138 阅读 · 0 评论 -
研磨设计模式 之 原型模式(Prototype)1 ——跟着cc学设计系列
9.1 场景问题9.1.1 订单处理系统考虑这样一个实际应用:订单处理系统。现在有一个订单处理的系统,里面有个保存订单的业务功能,在这个业务功能里面,客户有这么一个需求:每当订单的预定产品数量超过1000的时候,就需要把订单拆成两份订单来保存,如果拆成两份订单后,还是超过1000,那就继续拆分,直到每份订单的预定产品数量不超过1000。至于为什么要拆分,原因是好进行订...2012-08-07 17:54:29 · 183 阅读 · 0 评论 -
跟着cc学设计 之 研磨设计模式 目录汇总贴
研磨设计模式 的 前言 ——跟着cc学设计系列 《研磨设计模式》 配套源代码 ——跟着cc学设计系列 研磨设计模式之工厂方法模式-1 ——跟着cc学设计系列 研磨设计模式之工厂方法模式-2 ——跟着cc学设计系列 研磨设计模式之工厂方法模式-3 ——跟着cc学设计系列 研磨设计模式之工厂方法模式-4 ——跟着cc学设计系列 研磨设计模式之工厂方法模式-5 ——跟着c...2012-08-07 17:40:36 · 124 阅读 · 0 评论 -
研磨设计模式 之 生成器模式(Builder)3 ——跟着cc学设计系列
8.3 模式讲解8.3.1 认识生成器模式(1)生成器模式的功能生成器模式的主要功能是构建复杂的产品,而且是细化的,分步骤的构建产品,也就是生成器模式重在解决一步一步构造复杂对象的问题。如果光是这么认识生成器模式的功能是不够的。更为重要的是,这个构建的过程是统一的,固定不变的,变化的部分放到生成器部分了,只要配置不同的生成器,那么同样的构建过程,就能构建出不同的产品表示来...2012-08-03 11:26:40 · 123 阅读 · 0 评论 -
研磨设计模式 之 生成器模式(Builder)2 ——跟着cc学设计系列
8.2 解决方案8.2.1 生成器模式来解决用来解决上述问题的一个合理的解决方案就是生成器模式。那么什么是生成器模式呢?(1)生成器模式定义 (2)应用生成器模式来解决的思路 仔细分析上面的实现,构建每种格式的数据文件的处理过程,这不就是构建过程吗?而每种格式具体的步骤实现,不就相当于是不同的表示吗?因为不同的步骤实现,决定了最终的表现也就不同。也就是...2012-08-03 11:26:15 · 127 阅读 · 0 评论 -
研磨设计模式 之 生成器模式(Builder)1 ——跟着cc学设计系列
8.1 场景问题8.1.1 继续导出数据的应用框架在讨论工厂方法模式的时候,提到了一个导出数据的应用框架。对于导出数据的应用框架,通常在导出数据上,会有一些约定的方式,比如导出成:文本格式、数据库备份形式、Excel格式、Xml格式等等。在工厂方法模式章节里面,讨论并使用工厂方法模式来解决了如何选择具体导出方式的问题,并没有涉及到每种方式具体如何实现。换句话说,在讨论...2012-08-02 14:14:20 · 146 阅读 · 0 评论 -
《研磨设计模式》 配套源代码
不知得罪了哪位朋友,盯着踩啊,提供个源代码而已,犯得着您老动用几十个马甲来死踩吗?看看您的那些马甲,注册时间都连着呢,访问时间也挨着呢!《研磨设计模式》一书的源代码已经整理好了,现提供各位朋友下载。 源代码的说明:1:本源代码是《研磨设计模式》一书的配套源代码2:每个模式的示例源代码放在一个单独的文件夹下,以该模式的英文名称命名3:每个模式下分成多个ex...2011-02-14 17:21:08 · 326 阅读 · 2 评论 -
研磨设计模式 配套源代码发放
《研磨设计模式》一书的源代码已经整理好了,现提供各位朋友下载。 源代码的说明:1:本源代码是《研磨设计模式》一书的配套源代码2:每个模式的示例源代码放在一个单独的文件夹下,以该模式的英文名称命名3:每个模式下分成多个example,按照书的示例顺序分别命名为example1、example2......以此类推4:每个模式的示例基本上都是完整的,您可以参考和任意使用5:基本上每个exa...2011-02-14 09:26:13 · 254 阅读 · 0 评论 -
研磨设计模式之单例模式-4
3.8 在Java中一种更好的单例实现方式 根据上面的分析,常见的两种单例实现方式都存在小小的缺陷,那么有没有一种方案,既能够实现延迟加载,又能够实现线程安全呢? 还真有高人想到这样的解决方案了,这个解决方案被称为Lazy initialization holder class模式,这个模式综合使用了Java的类级内部类和多线程缺省同步锁的知识,很巧妙的同时实现了...2010-08-09 07:18:00 · 94 阅读 · 0 评论 -
研磨设计模式之单例模式-3
3.3 延迟加载的思想 单例模式的懒汉式实现方式体现了延迟加载的思想,什么是延迟加载呢? 通俗点说,就是一开始不要加载资源或者数据,一直等,等到马上就要使用这个资源或者数据了,躲不过去了才加载,所以也称Lazy Load,不是懒惰啊,是“延迟加载”,这在实际开发中是一种很常见的思想,尽可能的节约资源。 体现在什么地方呢?看如下代码: 3.4 缓...2010-08-02 07:49:08 · 76 阅读 · 0 评论 -
研磨设计模式之单例模式-2
3 模式讲解3.1 认识单例模式(1)单例模式的功能 单例模式的功能是用来保证这个类在运行期间只会被创建一个类实例,另外单例模式还提供了一个全局唯一访问这个类实例的访问点,就是那个getInstance的方法。不管采用懒汉式还是饿汉式的实现方式,这个全局访问点是一样的。 对于单例模式而言,不管采用何种实现方式,它都是只关心类实例的创建问题,并不关心具体的...2010-07-29 07:45:40 · 79 阅读 · 0 评论 -
研磨设计模式 之 中介者模式(Mediator)1 ——跟着cc学设计系列
10.1 场景问题10.1.1 如果没有主板大家都知道,电脑里面各个配件之间的交互,主要是通过主板来完成的(事实上主板有很多的功能,这里不去讨论)。试想一下,如果电脑里面没有主板,会怎样呢?如果电脑里面没有了主板,那么各个配件之间就必须自行相互交互,以互相传送数据,理论上说,基本上各个配件相互之间都存在交互数据的可能。如图10.1所示: 图10.1 没有主板,各个配...2012-08-09 08:23:03 · 181 阅读 · 0 评论 -
研磨设计模式 之 中介者模式(Mediator)2 ——跟着cc学设计系列
10.2 解决方案10.2.1 中介者模式来解决用来解决上述问题的一个合理的解决方案就是中介者模式。那么什么是中介者模式呢?(1)中介者模式定义 (2)应用中介者模式来解决的思路仔细分析上面的问题,根本原因就在于多个对象需要相互交互,从而导致对象之间紧密耦合,这就不利于对象的修改和维护。中介者模式的解决思路很简单,跟电脑的例子一样,中介者模式通过引入一个...2012-08-09 08:23:50 · 182 阅读 · 0 评论 -
研磨设计模式 之 中介者模式(Mediator)3 ——跟着cc学设计系列
10.3 模式讲解10.3.1 认识中介者模式(1)模式的功能中介者的功能非常简单,就是封装对象之间的交互。如果一个对象的操作会引起其它相关对象的变化,或者是某个操作需要引起其它对象的后续或连带操作,而这个对象又不希望自己来处理这些关系,那么就可以找中介者,把所有的麻烦扔给它,只在需要的时候通知中介者,其它的就让中介者去处理就可以了。 反过来,其它的对象在操作...2012-08-11 11:50:07 · 120 阅读 · 0 评论 -
研磨设计模式 之 组合模式(Composite) 2——跟着cc学设计系列
15.2 解决方案15.2.1 组合模式来解决用来解决上述问题的一个合理的解决方案就是组合模式。那么什么是组合模式呢?(1)组合模式定义 (2)应用组合模式来解决的思路 仔细分析上面不用模式的例子中,要区分组合对象和叶子对象的根本原因,就在于没有把组合对象和叶子对象统一起来,也就是说,组合对象类型和叶子对象类型是完全不同的类型,这导致了操作的时候必须区...2012-08-20 13:53:19 · 302 阅读 · 0 评论 -
研磨设计模式 之 组合模式(Composite) 1——跟着cc学设计系列
15.1 场景问题15.1.1 商品类别树 考虑这样一个实际的应用:管理商品类别树。在实现跟商品有关的应用系统的时候,一个很常见的功能就是商品类别树的管理,比如有如下所示的商品类别树:+服装+男装 -衬衣 -夹克 ...2012-08-20 12:17:50 · 210 阅读 · 0 评论 -
研磨设计模式 之 迭代器模式(Iterator)3——跟着cc学设计系列
14.3 模式讲解14.3.1 认识迭代器模式(1)迭代器模式的功能迭代器模式的功能主要在于提供对聚合对象的迭代访问。迭代器就围绕着这个“访问”做文章,延伸出很多的功能来。比如:以不同的方式遍历聚合对象,比如向前、向后等对同一个聚合同时进行多个遍历以不同的遍历策略来遍历聚合,比如是否需要过滤等多态迭代,含义是:为不同的聚合结构,提供统一的迭代接口,也就是说通...2012-08-19 07:07:07 · 179 阅读 · 0 评论 -
研磨设计模式 之 迭代器模式(Iterator)2——跟着cc学设计系列
14.2 解决方案14.2.1 迭代器模式来解决用来解决上述问题的一个合理的解决方案就是迭代器模式。那么什么是迭代器模式呢?(1)迭代器模式定义 所谓聚合是:指一组对象的组合结构,比如:Java中的集合、数组等。(2)应用迭代器模式来解决的思路 仔细分析上面的问题,要以一个统一的方式来访问内部实现不同的聚合对象,那么首先就需要把这个统一的访问方式...2012-08-18 03:48:51 · 169 阅读 · 0 评论 -
研磨设计模式 之 迭代器模式(Iterator)1——跟着cc学设计系列
14.1 场景问题14.1.1 工资表数据的整合 考虑这样一个实际应用:整合工资表数据。 这个项目的背景是这样的,项目的客户方收购了一家小公司,这家小公司有自己的工资系统,现在需要整合到客户方已有的工资系统上。 客户方已有的工资系统,在内部是采用的List来记录工资列表;而新收购的这家公司的工资系统,在内部是采用的数组来记录工资列表;但...2012-08-17 10:38:57 · 158 阅读 · 0 评论 -
私塾在线《研磨设计模式》,精品课程上线特大惊喜
《研磨设计模式》——跟着CC学设计,视频课程在 私塾在线 上线啦! 想学习设计模式的朋友可以前去看看。 本视频课程是北京Java私塾原创精品书籍《研磨设计模式》一书的配套学习视频,由《研磨设计模式》的第一作者CC录制 软件开发越来越复杂,对软件设计的要求也越来越高,而软件设计和架构的入门功夫就是深入理解和掌握设计模式,因此,计模式的重要性不言而喻。 很多朋友也...原创 2012-08-17 10:03:11 · 446 阅读 · 0 评论 -
研磨设计模式 之 观察者模式(Observer) 3——跟着cc学设计系列
12.3 模式讲解12.3.1 认识观察者模式(1)目标和观察者之间的关系 按照模式的定义,目标和观察者之间是典型的一对多的关系。 但是要注意,如果观察者只有一个,也是可以的,这样就变相实现了目标和观察者之间一对一的关系,这也使得在处理一个对象的状态变化会影响到另一个对象的时候,也可以考虑使用观察者模式。 同样的,一个观察者也可以观...2012-08-16 08:51:16 · 501 阅读 · 0 评论 -
研磨设计模式 之 观察者模式(Observer) 2——跟着cc学设计系列
12.2 解决方案12.2.1 观察者模式来解决用来解决上述问题的一个合理的解决方案就是观察者模式。那么什么是观察者模式呢?(1)观察者模式定义 (2)应用观察者模式来解决的思路在前面描述的订阅报纸的例子里面,对于报社来说,在一开始,它并不清楚究竟有多少个订阅者会来订阅报纸,因此,报社需要维护一个订阅者的列表,这样当报社出版报纸的时候,才能够把报纸发放到所有...2012-08-15 07:03:30 · 105 阅读 · 0 评论 -
研磨设计模式 之 观察者模式(Observer) 1——跟着cc学设计系列
12.1 场景问题12.1.1 订阅报纸的过程来考虑实际生活中订阅报纸的过程,这里简单总结了一下,订阅报纸的基本流程如下:首先按照自己的需要选择合适的报纸,具体的报刊杂志目录可以从邮局获取。选择好后,就到邮局去填写订阅单,同时交上所需的费用。至此,就完成了报纸的订阅过程,接下去的就是耐心等候,报社会按照出报时间推出报纸,然后报纸会被送到每个订阅人的手里。 ...2012-08-15 07:03:01 · 136 阅读 · 0 评论 -
研磨设计模式 之 代理模式(Proxy)3——跟着cc学设计系列
11.3 模式讲解11.3.1 认识代理模式(1)代理模式的功能代理模式是通过创建一个代理对象,用这个代理对象去代表真实的对象,客户端得到这个代理对象过后,对客户端没有什么影响,就跟得到了真实对象一样来使用。 当客户端操作这个代理对象的时候,实际上功能最终还是会由真实的对象来完成,只不过是通过代理操作的,也就是客户端操作代理,代理操作真正的对象。 ...2012-08-14 14:36:52 · 107 阅读 · 0 评论 -
研磨设计模式 之 代理模式(Proxy)2——跟着cc学设计系列
11.2 解决方案11.2.1 代理模式来解决用来解决上述问题的一个合理的解决方案就是代理模式。那么什么是代理模式呢?(1)代理模式定义 (2)应用代理模式来解决的思路仔细分析上面的问题,一次性访问多条数据,这个可能性是很难避免的,是客户的需要。也就是说,要想节省内存,就不能从减少数据条数入手了,那就只能从减少每条数据的数据量上来考虑。一个基本的思路如下...2012-08-13 12:36:00 · 133 阅读 · 0 评论 -
研磨设计模式 之 代理模式(Proxy)1——跟着cc学设计系列
11.1 场景问题11.1.1 访问多条数据 考虑这样一个实际应用:要一次性访问多条数据。 这个功能的背景是这样的;在一个HR(人力资源)应用项目中客户提出,当选择一个部门或是分公司的时候,要把这个部门或者分公司下的所有员工都显示出来,而且不要翻页,好方便他们进行业务处理。在显示全部员工的时候,只需要显示名称即可,但是也需要提供如下的功能:在必要的时候...2012-08-13 12:35:25 · 147 阅读 · 0 评论 -
研磨设计模式之单例模式-1
看到很多朋友在写单例,也来凑个热闹,虽然很简单,但是也有很多知识点在单例里面,看看是否能写出点不一样来。 单例模式(Singleton) 1 场景问题1.1 读取配置文件的内容 考虑这样一个应用,读取配置文件的内容。 很多应用项目,都有与应用相关的配置文件,这些配置文件多是由项目开发人员自定义的,在里面定义一些应用需要的参数...2010-07-26 08:58:54 · 105 阅读 · 0 评论 -
研磨设计模式之命令模式-6
3.7 命令模式的优缺点 更松散的耦合 命令模式使得发起命令的对象——客户端,和具体实现命令的对象——接收者对象完全解耦,也就是说发起命令的对象,完全不知道具体实现对象是谁,也不知道如何实现。 更动态的控制 命令模式把请求封装起来,可以动态对它进行参数化、队列化和日志化等操作,从而使得系统更灵活。能很自然的复合命令 命令模式中的命令对象,能够很容易的组...2010-07-23 07:59:03 · 166 阅读 · 0 评论 -
研磨设计模式之命令模式-5
3.5 队列请求 所谓队列请求,就是对命令对象进行排队,组成工作队列,然后依次取出命令对象来执行。多用多线程或者线程池来进行命令队列的处理,当然也可以不用多线程,就是一个线程,一个命令一个命令的循环处理,就是慢点。 继续宏命令的例子,其实在后厨,会收到很多很多的菜单,一般是按照菜单传递到后厨的先后顺序来进行处理,对每张菜单,假定也是按照菜品的先后顺序进行制作...2010-07-20 10:57:07 · 117 阅读 · 0 评论 -
博文从首页被撤下,15天内不能发布到首页
3 小时前JavaEye管理员 发给 我 的消息正文:chjavach,你好!发表到JavaEye博客频道首页的文章应该是原创性质的、言之有物的文章,并且不允许您发布广告性质、软文性质、提问性质或者具有攻击性质的文章到博客频道首页。您的博客文章'研磨设计模式之简单工厂模式-1'不符合该发布条件,从博客频道首页撤出。在15天之内,您的博客文章将无法在博客频道首页发表。...2010-11-02 17:41:03 · 88 阅读 · 0 评论 -
研磨设计模式之简单工厂模式-1
继续研磨设计模式,来个简单的 简单工厂 简单工厂不是一个标准的设计模式,但是它实在是太常用了,简单而又神奇,所以还是需要好好掌握的,就当是对学习设计模式的热身运动吧。 为了保持一致性,我们尽量按照学习其它模式的步骤来进行学习。1 场景问题 大家都知道,在Java应用开发中,要“面向接口编程”。 那么什么是接口?...2010-11-02 10:17:18 · 98 阅读 · 0 评论 -
研磨设计模式 封面show
今天收到编辑发过来的最终图书封面,很开心,拿出来show一下! 顺带做个广告,《研磨设计模式》 一书由 清华大学出版社 出版并发行,即将上市,敬请关注! 《研磨设计模式》一书已经上市,卓越网销售链接:http://www.amazon.cn/%E7%A0%94%E7%A3%A8%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F-%E9%99%...2010-10-29 22:13:48 · 89 阅读 · 0 评论 -
研磨设计模式之抽象工厂模式-1
继续模式之旅,来个简单点的 抽象工厂模式(Abstract Factory)1.1 场景问题1.1.1 选择组装电脑的配件 举个生活中常见的例子——组装电脑,我们在组装电脑的时候,通常需要选择一系列的配件,比如:CPU、硬盘、内存、主板、电源、机箱等等。为了使讨论简单点,只考虑选择CPU和主板的问题。 事实上,我...2010-10-25 10:05:08 · 117 阅读 · 0 评论 -
研磨设计模式之装饰模式-4
3.3 装饰模式和AOP 装饰模式和AOP在思想上有共同之处。可能有些朋友还不太了解AOP,下面先简单介绍一下AOP的基础知识。1:什么是AOP——面向方面编程 AOP是一种编程范式,提供从另一个角度来考虑程序结构以完善面向对象编程(OOP)。 在面向对象开发中,考虑系统的角度通常是纵向的,比如我们经常画出的如下的系统架构图,默认都是从上到下,上层依...2010-10-18 08:40:40 · 363 阅读 · 0 评论 -
研磨设计模式之装饰模式-3
3 模式讲解3.1 认识装饰模式(1)模式功能 装饰模式能够实现动态的为对象添加功能,是从一个对象外部来给对象增加功能,相当于是改变了对象的外观。当装饰过后,从外部使用系统的角度看,就不再是使用原始的那个对象了,而是使用被一系列的装饰器装饰过后的对象。 这样就能够灵活的改变一个对象的功能,只要动态组合的装饰器发生了改变,那么最终所得到的对象的功能也...2010-10-11 07:53:39 · 146 阅读 · 0 评论 -
研磨设计模式之装饰模式-2
2 解决方案2.1 装饰模式来解决 用来解决上述问题的一个合理的解决方案,就是使用装饰模式。那么什么是装饰模式呢?(1)装饰模式定义 (2)应用装饰模式来解决的思路 虽然经过简化,业务简单了很多,但是需要解决的问题不会少,还是要解决:要透明的给一个对象增加功能,并实现功能的动态组合。 所谓透明的给一个对象增加功能,换句话说就是要给一个对象...2010-09-27 08:18:16 · 115 阅读 · 0 评论 -
研磨设计模式之装饰模式-1
装饰模式(Decorator)1 场景问题1.1 复杂的奖金计算 考虑这样一个实际应用:就是如何实现灵活的奖金计算。 奖金计算是相对复杂的功能,尤其是对于业务部门的奖金计算方式,是非常复杂的,除了业务功能复杂外,另外一个麻烦之处是计算方式还经常需要变动,因为业务部门经常通过调整奖金的计算方式来激励士气。 先从业务上看看现有的奖金计算方...2010-09-20 08:10:59 · 211 阅读 · 0 评论 -
大讨论:学习和应用设计模式的经验、教训、疑问等
大讨论:学习和应用设计模式的经验、教训、疑问等 在JavaEye发设计模式方面的文章也2个月了,获得了很多朋友的关爱和支持。这也说明了很多朋友对设计模式是很感兴趣的。 当然大家都知道,学习和掌握设计模式,是快速提高自身设计能力和技术水平的捷径,更是想要做设计和架构的朋友的必备知识! 可是很多朋友...2010-09-13 16:55:22 · 121 阅读 · 0 评论