
设计模式
Mr_55
这个作者很懒,什么都没留下…
展开
-
图解设计模式读书笔记(一)——Iterator模式
一、涉及的类public interface Aggregate { public abstract Iterator iterator();}public interface Iterator { public abstract boolean hasNext(); public abstract Object next();}public cla...原创 2018-08-29 20:38:00 · 241 阅读 · 0 评论 -
图解设计模式读书笔记(十八)——Proxy(代理)模式
使用场景:当生成“本人”时比较消耗资源,一些事情就可以交给“代理人”来帮忙处理,只有当“代理人”无法处理时,再生成“本人”来处理。类关系图:Proxy(代理人)和RealSubject(本人)都实现同个接口Subject,这样客户端就不需要关系具体是代理人处理的还是本人处理的。一些可由代理人处理的就交给Proxy处理,必须要本人处理的,再生成RealSubject实例,让本人去处理...原创 2018-09-25 20:04:34 · 358 阅读 · 0 评论 -
图解设计模式读书笔记(十七)——Flyweight(轻量/享元)模式
使用场景:对象可以复用/共享的情况,只new一次,然后将对象实例保存起来,下次需要使用的时候,先查看该对象是否已经存在,过存在则直接返回,不存在再new。类关系图一般有一个FlyweightFactory负责创建并存储需要的Flyweight对象,核心代码如下:Flyweight flyweight = pool.get(name);if(flyweight == null...原创 2018-09-25 20:04:00 · 221 阅读 · 0 评论 -
图解设计模式读书笔记(十六)——State(状态)模式
使用场景:参考https://www.cnblogs.com/java-my-life/archive/2012/06/08/2538146.html这里的一句话:状态模式的功能就是分离状态的行为,通过维护状态的变化,来调用不同状态对应的不同功能。类关系图:State一般设计为接口,定义状态的行为,Context持有State对象,状态的切换可以放在Context做(Conte...原创 2018-09-18 19:53:02 · 296 阅读 · 0 评论 -
图解设计模式读书笔记(十四)——Observer(观察者)模式
观察者模式的原理是比较简单的,将观察者实例设置给被观察者,被观察者发生状态变化时,使用观察者实例调用对应的方法,那么观察者就能收到对应的变化了。这里要注意一下实现的细节。使用场景:观察者模式在代码中使用是非常频繁的,特别是设计Gui的开发。书中有句话:适用于能根据对象状态进行相应处理的场景。 类结构图:具体的实现一般情况会先对观察者Observer和被观察者Subject进...原创 2018-09-18 19:51:16 · 222 阅读 · 0 评论 -
图解设计模式读书笔记(十三)——Mediator(仲裁者)模式
使用场景: Mediator模式适用于多组件之间存在制约关系的情景。例如Gui开发中,各种组件是独立的,但开发的界面中各个组件存在制约关系。书中提到的登陆框的例子,便是这种情景。 类关系图:仲裁者Mediator负责生成各种组件colleague,并将自身实例传给组件,以便组件可以回调状态给仲裁者,这里可用观察者模式实现。meidator还通过controlCol...原创 2018-09-18 19:11:38 · 594 阅读 · 0 评论 -
图解设计模式读书笔记(十二)——Facade(简单窗口)模式
这个模式的名称比较抽象,如果不看内容,基本猜不出是什么。应用场景:功能实现的业务逻辑非常复杂,特别是对一些流程有严格对控制,但对于客户端而言却相对简单,不需要关注其内部实现的情况。举个例子,登陆功能。客户端只需要知道有个登陆的接口,不需要知道登陆的具体实现,也不用关心登陆操作需要先干什么再干什么,这种情况适合用简单窗口模式。说白了,就是提供一个窗口类,对外只开放一些简单的API,客...原创 2018-09-18 19:09:59 · 230 阅读 · 0 评论 -
图解设计模式读书笔记(十一)——Chain of Responsibility(责任链)模式
看到这个模式,最先想到的就是okhttp跟Android的事件处理机制了。使用场景:当功能出现分层,层级之间相对独立这种情况,可考虑使用责任链模式。类关系图:Handler是一个抽象类,它拥有属性next,类型是自身类型,并有处理请求但request方法。具体的Handler实现类定义自身对事件的处理逻辑,如果自身处理不了,则将事件传递给next,由next去处理,以此类推...原创 2018-09-17 18:57:05 · 307 阅读 · 0 评论 -
图解设计模式读书笔记(九)——Decorator(装饰)模式
应用场景:最主要的应用场景就是当要增加一些基本功能的排列组合而产生的非常大量的功能时。举几个例子:1.文中的装饰显示的例子,有多种装饰方式,比如在字符串两边加 “|”,或者上下加一行“+------+”这种符号,文中只提到对单行的String的装饰,还可能会有其他类型的装饰,如Int,boolean等。如果不使用装饰着模式,则需要对StringDisplay类不断的继承扩展,特别是在需...原创 2018-09-15 10:57:16 · 450 阅读 · 0 评论 -
图解设计模式读书笔记(十)——Visitor(访问者)模式
设计目的:为了使数据结构跟对数据对操作分离,从而让数据结构更独立。也就是说,要增加或修改某种操作时,不需要修改数据结构,而是扩展或者修改数据结构的访问者visitor。非常符合开闭原则。 类结构图:Element是数据结构,为子类统一提供了accept接口来接受visitor对象。Visitor是访问者的抽象,提供访问数据结构的接口。书中的反问文件夹的例子里,accep...原创 2018-09-15 11:19:40 · 282 阅读 · 0 评论 -
图解设计模式读书笔记(八)——Composite(组合)模式
类结构图:先来看看composite模式的类结构图,非常简单,只涉及三个类:应用场景:主要就是树形结构的设计,树结构设计父节点,子叶节点,其中Leaf就是子叶节点,Composite是父节点的抽象,由于各种节点都有一些通用的属性或者方法,所以Leaf和Composite继承自同一个父类Component,Component定义了节点所有的方法,提供add和remove和getChi...原创 2018-09-13 20:15:04 · 254 阅读 · 0 评论 -
图解设计模式读书笔记(四)——单例模式
书中介绍的单例模式是懒汉式的,除此之外还有几种实现方式,这里总结一下几种常用的单例模式和优缺点。1.饿汉式public class Singleton { private static Singleton instance = new Singleton(); private Singleton (){} public static Singleton...原创 2018-08-31 19:29:41 · 207 阅读 · 0 评论 -
图解设计模式读书笔记(七)——Strategy(策略)模式
顾名思义,策略模式一般应用在使用多种策略(算法)的情况下,比如一些棋牌游戏中,电脑会有多种策略去应付用户,如入门级别,高手级别等。策略模式将操作抽象成接口,具体的算法由子类实现,有一个上下文环境Context来使用策略进行操作,context只需持有Strategy对象,使用其接口进行操作,而不需要关心具体的算法是如何实现的,当使用某种策略时,是需要给context传对应当ConcreteSt...原创 2018-09-12 18:41:03 · 343 阅读 · 0 评论 -
图解设计模式读书笔记(六)——Bridge(桥接)模式
废话:我觉得要理解一种设计模式,除了掌握怎么实现这种设计模式之外,更重要的是这种设计模式的应用场景。但还多时候应用场景很难用一些话概括起来,就像桥接模式中说的功能层次跟实现层次需要分离的时候,比较难理解。所有我更倾向于“如果不这么做,会怎样”的分析,从而来理解“这么做”的好处。解决的问题:桥接模式还是比较有用的一种模式,解决的问题是将系统的功能层次跟实现方法层次分离。这里要先理解功能层...原创 2018-09-11 19:32:07 · 313 阅读 · 0 评论 -
图解设计模式读书笔记(三)——工厂模式
书中的工厂模式分成了两章来叙述,只区分工厂方法模式和抽象工厂模式,因为简单工厂模式只是工厂方法模式中的一个特例。但是书中举的例子我觉得没那么好理解,于是自己设定了一个应用场景来帮助理解这三种设计模式。 (一)简单工厂模式假设有如下场景:有一个页面,上面有个Button,Button的风格有ButtonA和ButtonB两种,设置一能够让Button风格切换。此场景可以应用简单工...原创 2018-08-31 09:11:57 · 296 阅读 · 0 评论 -
结城浩的《图解设计模式》设计模式之Adapter模式的理解
书中举的电源适配器的例子,还有网上各种同类的例子,无法说服我。Banner类的两个方法,代表输出交流100伏,虽然外部调用的是Print接口的要输出12伏特的方法,但是实际还是调用PrintBanner的两个方法,其调用的还是Banner类的方法,那本质上还是输出100伏特啊,这样子在我看来,适配器的工作只是单纯的把两个接口对接起来,但是中间并没有任何“转换”之类的工作,并没有体现出如何将10...原创 2018-07-27 20:33:15 · 274 阅读 · 0 评论 -
图解设计模式读书笔记(五)——Prototype(原型)模式
原型模式是一种创建对象的方式,主要原理是使用java的Cloneable接口来克隆对象。书中举的加工字符串例子有点复杂,可能对原型模式的重点不够突出,因为有很多业务代码。我自己总结一下大致原理:Prototype继承自Cloneable接口,ConcreatePrototpye是具体的原型类,继承自Prototpye(Prototype可以是接口,那么就是实现Prototype接口)。...原创 2018-09-04 20:24:31 · 278 阅读 · 0 评论 -
图解设计模式读书笔记(十五)——Memento(备忘录)模式
使用场景:需要保存状态,以便将来执行redo/undo操作来恢复状态。多用在棋牌类游戏,书写编辑类应用上。基本思想:在保证封装性的基础上,将类的属性状态在外部保存起来。保证封装性的方式起始就是控制好memento类的可见性,即对于敏感数据,不使用public修饰,一般不用修饰符修饰,使得只能在同一个包中类能够访问。 类关系图:类图比较简单,Originator负责生...原创 2018-09-15 11:17:17 · 244 阅读 · 0 评论