GoF著作中未提到的设计模式(7):Publish-Subscribe
摘要:很多项目中都有消息分发或者事件通知机制,尤其是模块化程度高的项目。例如在办公自动化系统中,有些子系统对于新建用户这一事件很感兴趣,权限模块希望为这个新用户设置默认的权限,报表模块希望重新生成当月的报表,诸如此类的代码都写到新建用户的业务逻辑后面,会加大耦合度,可维护性降低,并且对于每个模块都是一个独立工程的情况,这种方式更是不可取。对于简单的情形,观察者模式就适用了,如果系统中有很多地方都需要收发消息,那么它就不适用了,否则会造成类数量的膨胀,增加类的复杂性,这时候就需要一种更集中的机制,Publish-Subscribe机制是个不错的选择,它的耦合性低,各个参与者之间毫无关联。每 一个消息.
阅读全文
posted @
2011-11-21 09:56
West_Link
阅读(3286)
推荐(1)
GoF著作中未提到的设计模式(6):Specification
摘要:在一个较为复杂的业务流程中,某些条件的满足与否决定了业务逻辑的走向,我们可以把这些条件抽离出来,使得任意个条件以某种关系进行组合,从而灵活地对业务逻辑进行定制。另外,在查询、过滤等应用场合中,我们也可以预定义多个条件,使用这些条件的组合来处理查询逻辑,而不是使用逻辑判断语句来处理,那样只会让代码变得复杂,让脑袋变大。 在Specification设计模式中,一个条件就是一个specification,多个specification通过串联的方式以某种逻辑关系形成一个组合式的specification。首先看一下整体的UML图:下面是Specification接口的声明:public inte.
阅读全文
posted @
2011-09-15 18:00
West_Link
阅读(3426)
推荐(4)
GoF著作中未提到的设计模式(5):Object Pool
摘要:Object Pool,即对象池,对象被预先创建并初始化后放入对象池中,对象提供者就能利用已有的对象来处理请求,减少对象频繁创建所占用的内存空间和初始化时间,例如数据库连接对象基本上都是创建后就被放入连接池中,后续的查询请求使用的是连接池中的对象,从而加快了查询速度。类似被放入对象池中的对象还包括Socket对象、线程对象和绘图对象(GDI对象)等。 在Object Pool设计模式中,主要有两个参与者:对象池的管理者和对象池的用户,用户从管理者那里获取对象,对象池对于用户来讲是透明的,但是用户必须遵守这些对象的使用规则,使用完对象后必须归还或者关闭对象,例如数据库连接对象使用完后必须关闭,.
阅读全文
posted @
2011-09-05 11:19
West_Link
阅读(3493)
推荐(2)
GoF著作中未提到的设计模式(4):Double Dispatch
摘要:我们先从字面上去理解它吧,直观地说,它指的是两次dispatch。这里的dispatch指的是什么呢?举个例子: class Event { public: virtual void PrintName() { cout<<"我是通用事件"<<endl; } } class KeyEvent:public Event { public: virtual void PrintName() { cout<<"我是按键事件"<<endl; } } class ClickEvent:public Event { p
阅读全文
posted @
2011-07-26 10:13
West_Link
阅读(3779)
推荐(0)
GoF著作中未提到的设计模式(3):Null Object
摘要:Null Object模式的目的包括:1. 当对象提供者无法提供指定类型的对象时, 返回一个什么都不做的对象, 这对调用者是透明的,并且调用者不用判断获得的对象是否为null了,当然,对象提供者必须告知调用者(通过约定等).2. 有时候需要传递一个什么都不做的某个类型的对象给合作方. 例如某个函数需要实现特定接口的对象(通过参数传入)进行某些操作, 该函数的调用者在某些情况下希望不进行这些操作,那么他就可以传进来一个实现了该接口但函数体全为空的对象,这个对象就是Null Object. 举个例子,从某处(不是通过new来创建)获得一个对象后,我们的第一反应就是判断这个对象是否为null,这都成
阅读全文
posted @
2011-07-08 09:44
West_Link
阅读(4361)
推荐(2)
GoF著作中未提到的设计模式(2):Interceptor
摘要:拦截器模式为我们提供了一种拦截方法调用或消息的途径,整个过程是自动的、透明的,下面是一个简单的拦截器示意图: 从图中可以看到,拦截器可以访问到方法调用的输入参数和返回结果,这样的话,拦截器能做的事儿就多啦,比如: 1、验证输入参数是否正确 2、偷偷地修改参数的值,例如参数类型的自动转换等 3、依赖注入 4、修改返回结果的内容、格式等 下面是一个包含我们要拦截的方法的类:public class Action{ // 拦截器集合的迭代器 private Iterator interceptors; // 输入参数 private Parameter param; // 返回结果 private.
阅读全文
posted @
2011-06-22 09:45
West_Link
阅读(5055)
推荐(0)
GoF著作中未提到的设计模式(1): Archetype
摘要:GoF著作中未提到的设计模式(1):Archetype 半天也没能给这个设计模式想出一个中文名称,算了,有时候还是原版的更容易理解。 简单地说,Archetype设计模式的目的是将业务处理逻辑和具体实现分离,所以至少需要两个参与者:Decorator和Delegate,它们都实现同一个接口,Decorator负责处理业务逻辑,而Delegate负责具体的实现,在Decorator的通用业务逻辑处理过程中,会把具体实现委派给Delegate。(注:这里的Decorator并不是指”装饰者“设计模式) 咱们还是用个例子讲吧,假设系统中有一个记录各种事件的接口: public interface E
阅读全文
posted @
2011-06-16 10:27
West_Link
阅读(3001)
推荐(1)