一,访问者模式的角色:抽象访问者:声明一个或者多个访问操作,形成所有的具体元素都要实现的接口具体访问者:实现抽象访问者所声明的接口
作者:中国IT实验室 来源:中国IT实验室 2007年8月26日
关键字:
二:解决
要求能访问到每个类的对应的方法。我们第一反应应该是这样的。
1 Iterator ie = list.iterator();
2 while (ie.hasNext()) {
3 Object obj = ie.next();
4 if (obj instanceof PA) {
5 ((PA)obj).runPA();
6 } else if (obj instanceof PB) {
7 ((PB)obj).runPB();
8 } else if (obj instanceof PC) {
9 ((PC)obj).runPC();
10 } else if (obj instanceof PD) {
11 ((PD)obj).runPD();
12 } else if (obj instanceof PE) {
13 ((PE)obj).runPE();
14 }
15 }
三:新问题及分析解决
当数目变多的时候,维护if else是个费力气的事情:
仔细分析if,else做的工作,首先判断类型,然後根据类型执行相应的函数
如何才能解决这两个问题呢?首先想到的是java的多态,多态就是根据参数执行相应的内容,
能很容易的解决第二个问题,我们可以写这样一个类:
1 public class visitor {
2 public void run(PA pa) {
3 pa.runPA();
4 }
5 public void run(PB pb) {
6 pb.runPB();
7 }
8 public void run(PC pc) {
9 pc.runPC();
10 }
11 public void run(PD pd) {
12 pd.runPD();
13 }
14 public void run(PE pe) {
15 pe.runPE();
16 }
17 }