研磨设计模式 之 组合模式(Composite) 3——跟着cc学设计系列 15.3 模式讲解15.3.1 认识组合模式(1)组合模式的目的组合模式的目的是:让客户端不再区分操作的是组合对象还是叶子对象,而是以一个统一的方式来操作。实现这个目标的关键之处,是设计一个抽象的组件类,让它可以代表组合对象和叶子对象。这样一来,客户端就不用区分到底是组合对象还是叶子对象了,只需要全部当成组件对象进行统一的操作就可以了。(2)对象树通常,组合模式会...
研磨设计模式 之 组合模式(Composite) 2——跟着cc学设计系列 15.2 解决方案15.2.1 组合模式来解决用来解决上述问题的一个合理的解决方案就是组合模式。那么什么是组合模式呢?(1)组合模式定义 (2)应用组合模式来解决的思路 仔细分析上面不用模式的例子中,要区分组合对象和叶子对象的根本原因,就在于没有把组合对象和叶子对象统一起来,也就是说,组合对象类型和叶子对象类型是完全不同的类型,这导致了操作的时候必须区...
研磨设计模式 之 组合模式(Composite) 1——跟着cc学设计系列 15.1 场景问题15.1.1 商品类别树 考虑这样一个实际的应用:管理商品类别树。在实现跟商品有关的应用系统的时候,一个很常见的功能就是商品类别树的管理,比如有如下所示的商品类别树:+服装+男装 -衬衣 -夹克 ...
研磨设计模式 之 迭代器模式(Iterator)3——跟着cc学设计系列 14.3 模式讲解14.3.1 认识迭代器模式(1)迭代器模式的功能迭代器模式的功能主要在于提供对聚合对象的迭代访问。迭代器就围绕着这个“访问”做文章,延伸出很多的功能来。比如:以不同的方式遍历聚合对象,比如向前、向后等对同一个聚合同时进行多个遍历以不同的遍历策略来遍历聚合,比如是否需要过滤等多态迭代,含义是:为不同的聚合结构,提供统一的迭代接口,也就是说通...
研磨设计模式 之 迭代器模式(Iterator)2——跟着cc学设计系列 14.2 解决方案14.2.1 迭代器模式来解决用来解决上述问题的一个合理的解决方案就是迭代器模式。那么什么是迭代器模式呢?(1)迭代器模式定义 所谓聚合是:指一组对象的组合结构,比如:Java中的集合、数组等。(2)应用迭代器模式来解决的思路 仔细分析上面的问题,要以一个统一的方式来访问内部实现不同的聚合对象,那么首先就需要把这个统一的访问方式...
研磨设计模式 之 迭代器模式(Iterator)1——跟着cc学设计系列 14.1 场景问题14.1.1 工资表数据的整合 考虑这样一个实际应用:整合工资表数据。 这个项目的背景是这样的,项目的客户方收购了一家小公司,这家小公司有自己的工资系统,现在需要整合到客户方已有的工资系统上。 客户方已有的工资系统,在内部是采用的List来记录工资列表;而新收购的这家公司的工资系统,在内部是采用的数组来记录工资列表;但...
私塾在线《研磨设计模式》,精品课程上线特大惊喜 《研磨设计模式》——跟着CC学设计,视频课程在 私塾在线 上线啦! 想学习设计模式的朋友可以前去看看。 本视频课程是北京Java私塾原创精品书籍《研磨设计模式》一书的配套学习视频,由《研磨设计模式》的第一作者CC录制 软件开发越来越复杂,对软件设计的要求也越来越高,而软件设计和架构的入门功夫就是深入理解和掌握设计模式,因此,计模式的重要性不言而喻。 很多朋友也...
跟着cc学设计 之 研磨设计模式 目录汇总贴 研磨设计模式 的 前言 ——跟着cc学设计系列 《研磨设计模式》 配套源代码 ——跟着cc学设计系列 研磨设计模式之工厂方法模式-1 ——跟着cc学设计系列 研磨设计模式之工厂方法模式-2 ——跟着cc学设计系列 研磨设计模式之工厂方法模式-3 ——跟着cc学设计系列 研磨设计模式之工厂方法模式-4 ——跟着cc学设计系列 研磨设计模式之工厂方法模式-5 ——跟着c...
研磨设计模式 之 观察者模式(Observer) 3——跟着cc学设计系列 12.3 模式讲解12.3.1 认识观察者模式(1)目标和观察者之间的关系 按照模式的定义,目标和观察者之间是典型的一对多的关系。 但是要注意,如果观察者只有一个,也是可以的,这样就变相实现了目标和观察者之间一对一的关系,这也使得在处理一个对象的状态变化会影响到另一个对象的时候,也可以考虑使用观察者模式。 同样的,一个观察者也可以观...
研磨设计模式 之 观察者模式(Observer) 2——跟着cc学设计系列 12.2 解决方案12.2.1 观察者模式来解决用来解决上述问题的一个合理的解决方案就是观察者模式。那么什么是观察者模式呢?(1)观察者模式定义 (2)应用观察者模式来解决的思路在前面描述的订阅报纸的例子里面,对于报社来说,在一开始,它并不清楚究竟有多少个订阅者会来订阅报纸,因此,报社需要维护一个订阅者的列表,这样当报社出版报纸的时候,才能够把报纸发放到所有...
研磨设计模式 之 观察者模式(Observer) 1——跟着cc学设计系列 12.1 场景问题12.1.1 订阅报纸的过程来考虑实际生活中订阅报纸的过程,这里简单总结了一下,订阅报纸的基本流程如下:首先按照自己的需要选择合适的报纸,具体的报刊杂志目录可以从邮局获取。选择好后,就到邮局去填写订阅单,同时交上所需的费用。至此,就完成了报纸的订阅过程,接下去的就是耐心等候,报社会按照出报时间推出报纸,然后报纸会被送到每个订阅人的手里。 ...
研磨设计模式 之 代理模式(Proxy)3——跟着cc学设计系列 11.3 模式讲解11.3.1 认识代理模式(1)代理模式的功能代理模式是通过创建一个代理对象,用这个代理对象去代表真实的对象,客户端得到这个代理对象过后,对客户端没有什么影响,就跟得到了真实对象一样来使用。 当客户端操作这个代理对象的时候,实际上功能最终还是会由真实的对象来完成,只不过是通过代理操作的,也就是客户端操作代理,代理操作真正的对象。 ...
研磨设计模式 之 代理模式(Proxy)2——跟着cc学设计系列 11.2 解决方案11.2.1 代理模式来解决用来解决上述问题的一个合理的解决方案就是代理模式。那么什么是代理模式呢?(1)代理模式定义 (2)应用代理模式来解决的思路仔细分析上面的问题,一次性访问多条数据,这个可能性是很难避免的,是客户的需要。也就是说,要想节省内存,就不能从减少数据条数入手了,那就只能从减少每条数据的数据量上来考虑。一个基本的思路如下...
研磨设计模式 之 代理模式(Proxy)1——跟着cc学设计系列 11.1 场景问题11.1.1 访问多条数据 考虑这样一个实际应用:要一次性访问多条数据。 这个功能的背景是这样的;在一个HR(人力资源)应用项目中客户提出,当选择一个部门或是分公司的时候,要把这个部门或者分公司下的所有员工都显示出来,而且不要翻页,好方便他们进行业务处理。在显示全部员工的时候,只需要显示名称即可,但是也需要提供如下的功能:在必要的时候...
研磨设计模式 之 中介者模式(Mediator)3 ——跟着cc学设计系列 10.3 模式讲解10.3.1 认识中介者模式(1)模式的功能中介者的功能非常简单,就是封装对象之间的交互。如果一个对象的操作会引起其它相关对象的变化,或者是某个操作需要引起其它对象的后续或连带操作,而这个对象又不希望自己来处理这些关系,那么就可以找中介者,把所有的麻烦扔给它,只在需要的时候通知中介者,其它的就让中介者去处理就可以了。 反过来,其它的对象在操作...
研磨设计模式 之 中介者模式(Mediator)2 ——跟着cc学设计系列 10.2 解决方案10.2.1 中介者模式来解决用来解决上述问题的一个合理的解决方案就是中介者模式。那么什么是中介者模式呢?(1)中介者模式定义 (2)应用中介者模式来解决的思路仔细分析上面的问题,根本原因就在于多个对象需要相互交互,从而导致对象之间紧密耦合,这就不利于对象的修改和维护。中介者模式的解决思路很简单,跟电脑的例子一样,中介者模式通过引入一个...
研磨设计模式 之 中介者模式(Mediator)1 ——跟着cc学设计系列 10.1 场景问题10.1.1 如果没有主板大家都知道,电脑里面各个配件之间的交互,主要是通过主板来完成的(事实上主板有很多的功能,这里不去讨论)。试想一下,如果电脑里面没有主板,会怎样呢?如果电脑里面没有了主板,那么各个配件之间就必须自行相互交互,以互相传送数据,理论上说,基本上各个配件相互之间都存在交互数据的可能。如图10.1所示: 图10.1 没有主板,各个配...
研磨设计模式 之 原型模式(Prototype)3 ——跟着cc学设计系列 9.3 模式讲解9.3.1 认识原型模式(1)原型模式的功能原型模式的功能实际上包含两个方面:一个是通过克隆来创建新的对象实例另一个是为克隆出来的新的对象实例复制原型实例属性的值原型模式要实现的主要功能就是:通过克隆来创建新的对象实例。一般来讲,新创建出来的实例的数据是和原型实例一样的。但是具体如何实现克隆,需要由程序自行实现,原型模式并没有统一的要求...
研磨设计模式 之 原型模式(Prototype)2 ——跟着cc学设计系列 9.2 解决方案9.2.1 原型模式来解决用来解决上述问题的一个合理的解决方案就是原型模式。那么什么是原型模式呢?(1)原型模式定义 (2)应用原型模式来解决的思路仔细分析上面的问题,在saveOrder方法里面,已经有了订单接口类型的对象实例,是从外部传入的,但是这里只是知道这个实例对象的种类是订单的接口类型,并不知道其具...
研磨设计模式 之 原型模式(Prototype)1 ——跟着cc学设计系列 9.1 场景问题9.1.1 订单处理系统考虑这样一个实际应用:订单处理系统。现在有一个订单处理的系统,里面有个保存订单的业务功能,在这个业务功能里面,客户有这么一个需求:每当订单的预定产品数量超过1000的时候,就需要把订单拆成两份订单来保存,如果拆成两份订单后,还是超过1000,那就继续拆分,直到每份订单的预定产品数量不超过1000。至于为什么要拆分,原因是好进行订...