
7种编外设计模式
IT_FISH629
纯正程序员一枚
展开
-
GoF著作中未提到的设计模式之四:Double Dispatch
我们先从字面上去理解它吧,直观地说,它指的是两次dispatch。这里的dispatch指的是什么呢?举个例子: class Event { public: virtual void PrintName() { cout"我是通用事件"endl;转载 2013-05-02 15:48:58 · 822 阅读 · 0 评论 -
GoF著作中未提到的设计模式之五:Object Pool
Object Pool,即对象池,对象被预先创建并初始化后放入对象池中,对象提供者就能利用已有的对象来处理请求,减少对象频繁创建所占用的内存空间和初始化时间,例如数据库连接对象基本上都是创建后就被放入连接池中,后续的查询请求使用的是连接池中的对象,从而加快了查询速度。类似被放入对象池中的对象还包括Socket对象、线程对象和绘图对象(GDI对象)等。 在Object Pool设计模式中,主要转载 2013-05-02 15:50:25 · 527 阅读 · 0 评论 -
GoF著作中未提到的设计模式之六:Specification
在一个较为复杂的业务流程中,某些条件的满足与否决定了业务逻辑的走向,我们可以把这些条件抽离出来,使得任意个条件以某种关系进行组合,从而灵活地对业务逻辑进行定制。另外,在查询、过滤等应用场合中,我们也可以预定义多个条件,使用这些条件的组合来处理查询逻辑,而不是使用逻辑判断语句来处理,那样只会让代码变得复杂,让脑袋变大。 在Specification设计模式中,一个条件就是一个specifica转载 2013-05-02 15:51:41 · 571 阅读 · 0 评论 -
GoF著作中未提到的设计模式之一: Archetype
半天也没能给这个设计模式想出一个中文名称,算了,有时候还是原版的更容易理解。 简单地说,Archetype设计模式的目的是将业务处理逻辑和具体实现分离,所以至少需要两个参与者:Decorator和Delegate, 它们都实现同一个接口,Decorator负责处理业务逻辑,而Delegate负责具体的实现,在Decorator的通用业务逻辑 处理过程中,会把具体实现委派给Delegate转载 2013-05-02 15:42:22 · 668 阅读 · 0 评论 -
GoF著作中未提到的设计模式之三:Null Object
Null Object模式的目的包括: 1. 当对象提供者无法提供指定类型的对象时, 返回一个什么都不做的对象, 这对调用者是透明的,并且调用者不用判断获得的对象是否为null了,当然,对象提供者必须告知调用者(通过约定等). 2. 有时候需要传递一个什么都不做的某个类型的对象给合作方. 例如某个函数需要实现特定接口的对象(通过参数传入)进行某些操作, 该函数的调用者在某些情况下希望不进行这些转载 2013-05-02 15:47:55 · 524 阅读 · 0 评论 -
GoF著作中未提到的设计模式之七:Publish-Subscribe
很多项目中都有消息分发或者事件通知机制,尤其是模块化程度高的项目。例如在办公自动化系统中,有些子系统对于新建用户这一事件很感兴趣,权限模块希望为这个新用户设置默认的权限,报表模块希望重新生成当月的报表,诸如此类的代码都写到新建用户的业务逻辑后面,会加大耦合度,可维护性降低,并且对于每个模块都是一个独立工程的情况,这种方式更是不可取。对于简单的情形,观察者模式就适用了,如果系统中有很多地方都需要收发转载 2013-05-02 15:52:40 · 581 阅读 · 0 评论 -
GoF著作中未提到的设计模式之二:Interceptor
拦截器模式为我们提供了一种拦截方法调用或消息的途径,整个过程是自动的、透明的,下面是一个简单的拦截器示意图: 从图中可以看到,拦截器可以访问到方法调用的输入参数和返回结果,这样的话,拦截器能做的事儿就多啦,比如: 1、验证输入参数是否正确 2、偷偷地修改参数的值,例如参数类型的自动转换等 3、依赖注入 4、修改返回结果的内容、格式等 下面是一个包含我们要转载 2013-05-02 15:46:35 · 611 阅读 · 0 评论