您的位置:首页 > 其它

侃访问模式(Visitor)

2006-05-12 17:01 239 查看
访问模式允许在不更改现有类层次结构的情况下向其中增加新方法。这里重点是不更改类层次结构,指的是类的框架,但可以很少的修改一些代码。
Visitor模式的核心机制是双重分发的技术。何谓双重分发呢?下面我会慢慢解释这个“双重分发”。
现在中国假冒产品猖獗,我就用这来举个例子,说明访问模式的方法。
让我们来看看UML图:
CProductVisit *pProductVisit = new CJapanFactory();
CProduct *pProduct = new CCamera();
pProduct->Accept(pProductVisit );
好了,Client端的调用就是这么简单,
CProduct中Accept函数的实现如下:

void Accept(CProductVisit* pVisit)
void Visit(CCamera *pCamera)
{
if(pCamera)
{
memcpy(pCamera->ProducingArea,"Camera Made in China, hangzhou");
}
}
现在看出在哪里进行第二次分发了吧。当派生对象是CCamera时,会调用访问者对象中的Visit(CCamera *pCamera)函数,当派生对象是CTV时,会相应去调用Visit(CTV *pTV)函数,从而实现对ProducingArea变量赋成相应的值。Visit函数就是第二次分发,它辨别出要执行的特定函数。

说了这么多,那访问模式适合在哪些场合使用呢?
比如不同的操作系统,对程序的配置不同,这时就能用上。总的来说,就是在不同环境有不同的设置的情况下,访问模式能有很好的用武之地。
本人是边学边写,有错误的地方还望指正。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: