设计模式学习笔记十二:访问者模式
介绍
访问者(visitor)模式,属于对象行为型模式,它实现了结构与行为的解耦。
意图:表示一个作用于某对象结构中的各元素的操作。它使你可以在不改变各元素的类的前提下定义作用于这些元素的新操作。(本段摘自《GoF设计模式》 5.11)
适用场景
访问者模式适合对象的结构稳定,行为变动频繁的情况。反之,结构变动频繁的场景不适合使用次模式。在后面的实现中可以很容易的证实这一点,结构的变化会增加更多繁复的操作。在一个已经的接口中增加方法会导致在其所有的实现类中都进行一次实现实现,没人愿意这么做。
UML结构图:
可以先略过,回头再看。
场景模拟
这里我以客户回访场景尝试解释访问者模式的应用:在公司Z中,会定期对他的客户进行回访。根据客户重要度的不同,人物、时间、地点也会不同。不管是否愿意承认,生活中到处充满着等级的划分不是么?
+ 普通客户:铜牌业务员A;时间:工作日;地点:电话连线。
+ 潜力优质客户:银牌业务员B;时间:沟通确定;地点:茶楼。
+ 优质客户:金牌业务员C;时间:沟通确定;地点:避暑山庄。
代码实现:
1.回访操作
package com.array7.visitor;
/**
* 回访接口,即Element
*/
public interface IRevisit {
void accpet(IWorkerVisitor visitor);
}
/**
* 约定的业务员,即ConcreteElement
*/
public class Worker implements IRevisit {
@Override
public void accpet(IWorkerVisitor visitor) {
visitor.visit(this);
}
}
/**
* 约定的回访时间,即ConcreteElement
*/
public class Time implements IRevisit {
@Override
public