摘要: 接下来我们讨论一个最难被正确使用也是在框架设计中最容易被误用的设计模式,观察者模式。 ”定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时, 所有依赖于它的对象都得到通知并被自动更新“ 上图是观察者模式的结构类图,乍一看会被这个设计模式的结构类图给吓个不轻。笔者想说结合这个结构的定义,一点 阅读全文
posted @ 2017-03-09 15:33 远行的猴子 阅读(324) 评论(0) 推荐(0) 编辑
摘要: GOF对于策略模式的定义是“定义一系列的算法,把它们一个个封装起来, 并且使它们可相互替换。本模式使得算法可独立于使用它的客户而变化”。 关于这句话的理解可分为两步骤,第一个步骤封装算法,第二步骤算法独立于客户。我们看看策略模式的结构类图。 这里的Context类就是客户类,客户类把关于算法的实现委 阅读全文
posted @ 2017-03-09 13:39 远行的猴子 阅读(166) 评论(0) 推荐(0) 编辑
摘要: 笔者最近在学习解释器设计模式的时候注意到了正则表达式的相关内容,突然想起之前一直都有的一个疑问。如何使用正则表达式匹配出一个正确的ip地址。 一个正确的ip地址是由几个小于255的数字组成的,考虑如何匹配出一个正确的小于255的数字,我们可以划分为个位十位百位,针对不同的情况来匹配。 注意到有以下几 阅读全文
posted @ 2017-03-08 16:41 远行的猴子 阅读(881) 评论(0) 推荐(0) 编辑
摘要: 命令模式是一个结构比较简单的设计模式,gof在书中对它的定义是:“将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤消的操作。” 这里有两个要点,第一请求被封装成了一个对象,第二请求可以被持久化(排队或是记录、取消)。 我们从第一个要点说起。首先 阅读全文
posted @ 2017-03-07 16:25 远行的猴子 阅读(153) 评论(0) 推荐(0) 编辑
摘要: 接下来我们继续探寻行为型模式。对于这类模式,笔者的理解是。它更多关注在如何抽象出一个或多个实体来把原本可能很复杂的控制流转移成多个职责分明的实体之间的交流上来。这样写出来的代码更容易被理解,同时也更容易被维护。在结构上,这类设计模式多采用组合的方式来实现,当然也有通过类继承的方式来实现,比如模板方法 阅读全文
posted @ 2017-03-07 14:27 远行的猴子 阅读(173) 评论(0) 推荐(0) 编辑
摘要: TBD 阅读全文
posted @ 2017-03-07 10:20 远行的猴子 阅读(78) 评论(0) 推荐(0) 编辑
摘要: tbd 阅读全文
posted @ 2017-03-07 10:19 远行的猴子 阅读(90) 评论(0) 推荐(0) 编辑
摘要: 我们先看看gof对生成器模式的结构描述。 值得注意的是跟工厂方法模式一样的,生成器模式也引入了一个新的抽象,不过这个抽象的名字是builder。我们可以在这个结果上补全出工程方法模式的结构(如下图)。正如图书所示,用client替代Director,增加一个product抽象类,去掉Concrete 阅读全文
posted @ 2017-03-06 17:15 远行的猴子 阅读(284) 评论(0) 推荐(0) 编辑
摘要: 抽象工厂模式的结构图如下: 读者注意到我在这个结构图上画了一个蓝色的方框,画出这个方框的原因是这个框里的结构就是一个典型的工厂模式(FACTORY METHOD)。这样来看抽象工厂模式就变得简单了,只是在工厂模式的基础上拓展了product的种类。既然作为工厂模式的拓展,工厂模式所有的优点都能被抽象 阅读全文
posted @ 2017-03-06 16:11 远行的猴子 阅读(143) 评论(0) 推荐(0) 编辑
摘要: 根据gof的设想,工厂方法模式被定义成了推迟实例化到子类的一种手段。“定义一个用于创建对象的接口,让子类决定实例化哪一个类。Factory Method使一个类的实例化延迟到其子类”。 以下是对工厂模式的结构解析。 正如从图里能读到的,工厂模式的初始愿意并没有规定一个特殊的抽象方法Create或者类 阅读全文
posted @ 2017-03-06 15:46 远行的猴子 阅读(157) 评论(0) 推荐(0) 编辑