大话设计模式笔记
文章平均质量分 83
iCoding91
KISS
keep it simple and short
展开
-
第9章《原型模式》
1、原型模式的规范定义:用原型实例指定创建对象的种类,并通过拷贝这些原型创建新的实例。2、原型模式的实质:利用一个指定的对象实例,再创建一个同类型的对象实例,且这个新对象可以被定制,而且不需要知道创建的细节。3、在java中的实现方式:一个类只要实现了Cloneable()接口,就能作为原型被复制。当创建一个同类型的新实例时,可以通过调用这个类的clone()方原创 2018-01-07 13:17:01 · 332 阅读 · 0 评论 -
第8章《工厂方法模式》
1、工厂方法和简单工厂的对比:1.1、添加新功能时,二者的区别:(1)简单工厂需要完成工作:添加一个新功能类+更改工厂类(2)工厂方法需要完成工作:添加一个新功能类+添加一个生成对象的工厂+更改客户端实例化工厂的代码1.2、二者共同点:集中封装了对象的创建,使得要更换对象时,不需要做大的动作就可实现,降低了客户端程序和产品对象的耦合。2、工厂方法的优点:2.原创 2018-01-06 10:53:35 · 251 阅读 · 0 评论 -
第21章《单例模式》
今天买了《大话设计模式》这本书,也是找朋友推荐的。晚上拿到手,就看了一下单例模式这一章,因为自己只是知道单例模式,其它模式完全不懂,就想看看这本书是不是真的读起来容易理解以及讲的怎么样。一个小时看完这一章节,觉得还可以吧,讲的东西是很容易理解,且循序渐进,虽然讲的东西自己基本都是知道的,因为之前就了解这个模式。接下来还要把其它模式研究一下,继续努力~~~关于单例模式,补充一下自己曾经遗原创 2017-12-13 21:54:48 · 295 阅读 · 0 评论 -
第7章《代理模式》
1、规范定义:为其它对象提供一种代理,以控制对这个对象的访问。 通俗的讲,就是本来C是要访问S的,但是通过加入代理P后,C不需要知道S是谁,C直接访问P,P通过自己的内部逻辑,去访问S,这就实现了C最终还是调用到了S的方法,只是不是自己直接调用,而是通过代理P调用的。2、代理模式结构图: 说明: (1)通过继承S原创 2018-01-03 21:44:30 · 263 阅读 · 0 评论 -
第6章《装饰模式》
1、定义:动态的给一个对象添加一些额外的功能 。2、实现方式:把每个装饰的功能放在单独的类,并让这个类包装它所要修饰的对象。3、优点:有效地把类的核心功能和装饰功能分开;去除相关类中重复的装饰逻辑。4、适用场景:当系统需要添加的新功能,而这些新功能只是为了对曾经的主类做一些修饰,只在特定情况下才会执行的特殊行为。这些新功能代码当然可以添加到原有的主类里,但是这一原创 2018-01-02 22:24:01 · 194 阅读 · 0 评论 -
第2章《策略模式》
1、策略模式实质:封装了变化点。2、策略模式定义:是一种定义了一系列算法的方法。说明:这些算法完成的工作都是一样的,只是实现方式不同而已(比如,商场促销,满1000减100和打九折,这就是两个算法,但完成的工作是一样的,你想,你去商场买衣服,付款时候,只能是使用其中一种策略减少付款金额,而不能叠加使用,所以完成的工作是一样的。)3、策略模式适用场景:通过其特点就能知道它原创 2018-01-01 13:30:01 · 326 阅读 · 0 评论 -
第1章《简单工厂模式》
1、学习总结:(1)工厂模式优点:a、将业务逻辑和界面逻辑分离,降低两者之间的耦合性。b、将具体的不同业务进行分离,实现业务间的松耦合。c、用一个单独的类来决定创建哪个业务实例的过程。这就是工厂。究竟要实例化哪个业务类,将来会不会增加实例化的对象,这些都是容易变化的地方,所以适合用一个工厂来做决策。其实,c的内容才是工厂模式的原理,但是c的实现,需要a和b已经实现的情况下才可以原创 2017-12-31 19:17:46 · 460 阅读 · 0 评论 -
第25章《中介者模式》
1.定义用一个对象来封装一系列的对象交互。中介者使各对象不需要显示的互相引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。2.优点中介者的出现降低了各个交互对象之间的耦合性,使得可以独立和复用所有的交互对象类、中介者类。由于把对象如何协作进行了抽象,将中介作为一个独立的概念并将其封装在一个对象中,这样关注的对象就从对象各自本身的行为转移到了它们之间的交互上来,也就是站在一个...原创 2018-02-20 22:57:13 · 282 阅读 · 0 评论 -
第26章《享元模式》
1.定义享元模式就是:运用共享技术有效地支持大量细粒度的对象。2.适用场景如果一个程序使用了大量的对象,而大量的这些对象造成了很大的开销时就应该考虑使用。 对象的大多数状态是外部状态,如果删除对象的外部状态,就可以用相对较少的共享对象取代很多组对象,此时可以考虑使用享元模式。 享元模式通常用于底层设计。 3.UML图 4.劣势使用享元...原创 2018-02-21 21:49:06 · 245 阅读 · 0 评论 -
第28章《访问者模式》
1.定义表示一个作用于某对象结构中的各元素的操作,它使你可以在不改变各元素的前提下定义作用于这些元素的新操作。 2.适用场景适用于数据结构相对稳定,又有易于变化的算法的系统(就是element稳定,visitor经常变化) 3.优势由于把数据结构和数据结构上的操作进行了解耦,也就是把处理从数据结构中分离出来,使得增加新的操作很容易,因为增加新的操作就意味着增加一个新的访问者。 4.缺点源于优点原创 2018-03-15 23:31:42 · 219 阅读 · 0 评论 -
第27章《解释器模式》
1.定义给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。 2.适用场景如果一种特定类型的问题发生的频率足够高,那么可能就值得将该问题的各个实例表述为一个简单语言中的句子。这一就可以构建一个解释器,该解释器通过解释这些句子来解决该问题。 3.优势可以很容易的扩展和改变文法,因为该模式使用类来表示文法规则,从而可以通过继承来...原创 2018-03-13 21:50:48 · 204 阅读 · 0 评论 -
第10章《模版方法模式》
1、规范定义:定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模版方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。重定义操作通过覆写模版方法里面的抽象方法而实现。2、实质:通过把不变行为迁移到超类,去除子类中的重复代码。3、优势:模版方法模式提供了一个很好的代码复用平台。4、应用场景:当我们要完成原创 2018-01-07 20:46:46 · 208 阅读 · 0 评论 -
第12章《外观模式》
1、准确定义:为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这个子系统更加容易使用。2、优势:完美体现了依赖倒转原则和迪米特法则。3、适用场景:3.1、在软件设计初期阶段,应有意识的将不同的两个层分离,然后在两个层之间建立一个Facade。3.2、在开发阶段,子系统往往因为不断的重构演化而变得复杂。通过增加外观原创 2018-01-07 21:17:12 · 190 阅读 · 0 评论 -
第13章《建造者模式》
1、准确定义: 将一个复杂对象的创建和表示分离,使得同样的创建过程可以得到不同的表示。2、适用场景:用于创建一些复杂的对象,这些对象内部构建间的顺序通常是稳定的,但对象内部的构建通常面临着复杂的变化。3、优势:使得建造代码和表示代码分离。由于建造者隐藏了产品是如何组装的,因此如果需要改变一个产品的内部表示时,只需要再添加一个ConcreteB原创 2018-01-08 21:15:22 · 212 阅读 · 0 评论 -
第24章《职责链模式》
1、定义:使得多个对象都有机会处理请求,从而避免请求的发送者和接受者之间的耦合关系。将这个对象连成一条链,并沿着这条链传递请求,直到有一个对象处理它为止。从定义分析:(1)对于一个请求会有多个对象对其进行转发。(2)请求的发送者和最终处理请求的接受者之间互相并不知道,没有任何耦合关系。(3)最终能够处理一个请求的对象有且只有一个,如果没有则表示处理过程or职责链设置出现错误。原创 2018-01-28 11:40:20 · 242 阅读 · 0 评论 -
第23章《命令模式》
1、定义:将一个请求封装为一个对象,从而可以使用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤销操作。2、优势:2.1、能较容易的设计一个命令队列。2.2、在需要的情况下,可以较容易的将命令记入日志。2.3、允许接受请求的一方决定是否要否决请求。2.4、可以容易的实现对请求的撤销和重做。2.5、由于加进具体命令类不影响其他的类,因此增加新的具体命原创 2018-01-26 17:34:24 · 245 阅读 · 0 评论 -
第22章《桥接模式》
1、定义:将抽象部分和它的实现部分分离,使它们都可以独立的变化。这个定义真的很拗口,然后GoF的定义,我也是读了好几遍,还是有点蒙圈。还好书里有一个比较通俗的解释:实现系统可能会有多角度分类,每一种分类都有可能变化,那么就把这种多角度分离出来让他们独立变化,减少它们之间的耦合。举个例子:手机的实现可以通过先按照品牌分类,然后在品牌下再按照功能分类;也可以先按照功能分类,然后每个功能原创 2018-01-26 11:34:17 · 299 阅读 · 0 评论 -
第20章《迭代器模式》
1、定义:提供一种方法顺序访问一个对象中各个元素,而又不暴露对象的内部表示。2、实际应用:由于现在高级语言,比如java、c#都已经把迭代器模式集成在语言中了,所以这个模式没有什么实用价值,但是有学习价值,我们还是可以了解一下迭代器模式内部是怎么实现的。3、对ArrayList的迭代器源码的分析:3.1、对ArrayList迭代器源码及其分析:(1)JDK8原创 2018-01-24 23:16:48 · 270 阅读 · 0 评论 -
第19章《组合模式》
1、定义:将对象组合成树形结构以表示“部分-整体”的层次结构。组合模式使得用户对单个对象和组合对象的适用具有一致性。2、适用场景:2.1、需求中是体现部分与整体层次的结构时;2.2、希望用户可以忽略组合对象和单个对象的不同,统一的使用组合结构中的所有对象时;满足以上两点,则应该考虑 使用组合模式。3、优势:3.1、客户代码中,任何使用到基本对象的地方都可原创 2018-01-24 21:11:14 · 240 阅读 · 0 评论 -
第18章《备忘录模式》
1、定义:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态。2、功能:2.1、当角色的状态改变时,有可能这个状态无效,这时候就可以使用暂存起来的备忘录将状态复原。2.2、实现命令的撤销功能。命令模式可以使用备忘录来存储可撤销操作的状态。3、适用场景:Memento模式适用于:功能比较复杂的,原创 2018-01-16 23:05:51 · 292 阅读 · 0 评论 -
第17章《适配器模式》
1、准确定义:将一个类的接口转换成客户希望的另一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。2、适用场景:2.1、两个类所做的事情相似或者相近,但具有不同的接口时,要使用适配器模式。2.2、通常在软件开发的后期或者维护期考虑使用。2.3、如果在软件开发的初期就使用,那么通常是使用了第三方组件,而这个组件的接口和我们自己的系统接口不原创 2018-01-16 21:06:14 · 242 阅读 · 0 评论 -
第16章《状态模式》
1、准确定义:当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类。2、解决的问题:状态模式主要用于解决:当控制一个对象状态转换的表达式过于复杂时。把状态的判断逻辑转移到表示不同状态的一系列类中,可以把复杂的逻辑简化。3、优势:将与特定状态相关的行为局部化,并且将不同状态的行为分割开来。4、适用场景:当一个对象的行为取决于它的状原创 2018-01-15 19:35:02 · 229 阅读 · 0 评论 -
第15章《抽象工厂模式》
1、工厂模式和抽象工厂模式的区别:工厂模式适合具体功能类ConcreteProductX只有一个系列的情况;抽象工厂模式适合一个具体功能类ConcreteProductX有至少两个系列的情况。2、抽象工厂模式准确定义:提供一个创建一系列相关或相互依赖的接口,而无需指定它们具体的类。3、抽象工厂模式的优点:3.1、易于交换产品系列,这是最大的优点。通过改变原创 2018-01-14 20:42:42 · 281 阅读 · 0 评论 -
第14章《观察者模式》
1、准确定义:定义了一种一对多的依赖关系,让多个观察者对象同事监听某一个主题的对象。这个主题对象在状态在发生变化时,会通知所有的观察者对象,让它们能够自动更新自己。2、使用的意义:讲一个系统分割成一系列相互协作的类有一个不好的副作用,那就是需要维护相关对象的一致性。我们不希望为了维持一致性而使得各类紧密耦合,这样会给维护、扩展、重用带来不便。而观察者模式的关键对象是主题原创 2018-01-10 09:29:28 · 216 阅读 · 0 评论 -
单例模式总结
单例模式饿汉模式 初始化时间 类加载到JVM时 缺点 类加载慢 优点 获取对象速度快 避免多线程的同步问题 懒汉模式【线程不安全】 初始化时间 第一次调用方法时 缺点 第一次方法调用响应慢,因需要实例化对象。 多线程不安全优点 节约资源 懒汉模式【线程安全】 初始化时间 第一次方法调用时 缺点 调用方法为“synch...原创 2018-08-16 19:51:30 · 323 阅读 · 0 评论