摘要: 我们先从字面上去理解它吧,直观地说,它指的是两次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 阅读(3727) 评论(3) 推荐(0) 编辑
摘要: Null Object模式的目的包括:1. 当对象提供者无法提供指定类型的对象时, 返回一个什么都不做的对象, 这对调用者是透明的,并且调用者不用判断获得的对象是否为null了,当然,对象提供者必须告知调用者(通过约定等).2. 有时候需要传递一个什么都不做的某个类型的对象给合作方. 例如某个函数需要实现特定接口的对象(通过参数传入)进行某些操作, 该函数的调用者在某些情况下希望不进行这些操作,那么他就可以传进来一个实现了该接口但函数体全为空的对象,这个对象就是Null Object. 举个例子,从某处(不是通过new来创建)获得一个对象后,我们的第一反应就是判断这个对象是否为null,这都成 阅读全文
posted @ 2011-07-08 09:44 West_Link 阅读(4340) 评论(14) 推荐(2) 编辑
摘要: 拦截器模式为我们提供了一种拦截方法调用或消息的途径,整个过程是自动的、透明的,下面是一个简单的拦截器示意图: 从图中可以看到,拦截器可以访问到方法调用的输入参数和返回结果,这样的话,拦截器能做的事儿就多啦,比如: 1、验证输入参数是否正确 2、偷偷地修改参数的值,例如参数类型的自动转换等 3、依赖注入 4、修改返回结果的内容、格式等 下面是一个包含我们要拦截的方法的类:public class Action{ // 拦截器集合的迭代器 private Iterator interceptors; // 输入参数 private Parameter param; // 返回结果 private. 阅读全文
posted @ 2011-06-22 09:45 West_Link 阅读(5032) 评论(16) 推荐(0) 编辑
摘要: GoF著作中未提到的设计模式(1):Archetype 半天也没能给这个设计模式想出一个中文名称,算了,有时候还是原版的更容易理解。 简单地说,Archetype设计模式的目的是将业务处理逻辑和具体实现分离,所以至少需要两个参与者:Decorator和Delegate,它们都实现同一个接口,Decorator负责处理业务逻辑,而Delegate负责具体的实现,在Decorator的通用业务逻辑处理过程中,会把具体实现委派给Delegate。(注:这里的Decorator并不是指”装饰者“设计模式) 咱们还是用个例子讲吧,假设系统中有一个记录各种事件的接口: public interface E 阅读全文
posted @ 2011-06-16 10:27 West_Link 阅读(2967) 评论(10) 推荐(1) 编辑
摘要: 记得在开源流行之前,我看过的代码紧限于所参与的项目,能有个几万行就不错哩。后来很多优秀开源项目都相继蹦出来了,阅读的代码量那叫一个大呀!不得不看。我现在掉到android这个大坑里,每天都要看很多源代码。以前做过J2EE,看Struts2、Lucene、OSWorkflow、iText等项目的源码,动机有三:文档不足、找问题的原因、好奇。当时有个项目用到了Dojo,这家伙可以说是源码最多的开源Javascript框架了,文档却严重不足,也没什么人用,只能看源码了。 要想快速并高效地阅读源码,一定要有好方法,不然看着会挺费劲,当然,用什么方法取决于具体的情况。我就把自己总结的方法给大家show. 阅读全文
posted @ 2011-06-07 16:58 West_Link 阅读(19181) 评论(6) 推荐(14) 编辑