打字猴:1.700472181e+09
1700472181
1700472182 ❑Element——抽象元素
1700472183
1700472184 接口或者抽象类,声明接受哪一类访问者访问,程序上是通过accept方法中的参数来定义的。
1700472185
1700472186 ❑ConcreteElement——具体元素
1700472187
1700472188 实现accept方法,通常是visitor.visit(this),基本上都形成了一种模式了。
1700472189
1700472190 ❑ObjectStruture——结构对象
1700472191
1700472192 元素产生者,一般容纳在多个不同类、不同接口的容器,如List、Set、Map等,在项目中,一般很少抽象出这个角色。
1700472193
1700472194 大家可以这样理解访问者模式,我作为一个访客(Visitor)到朋友家(Visited Class)去拜访,朋友之间聊聊天,喝喝酒,再相互吹捧吹捧,炫耀炫耀,这都正常。聊天的时候,朋友告诉我,他今年加官进爵了,工资也涨了30%,准备再买套房子,那我就在心里盘算(Visitor-self-method)“你这么有钱,我去年要借10万你都不借”,我根据朋友的信息,执行了自己的一个方法。
1700472195
1700472196 我们来看看访问者模式的通用源码,先看抽象元素,如代码清单25-11所示。
1700472197
1700472198 代码清单25-11 抽象元素
1700472199
1700472200 public abstract class Element{
1700472201
1700472202 //定义业务逻辑
1700472203
1700472204 public abstract void doSomething();
1700472205
1700472206 //允许谁来访问
1700472207
1700472208 public abstract void accept(IVisitor visitor);
1700472209
1700472210 }
1700472211
1700472212 抽象元素有两类方法:一是本身的业务逻辑,也就是元素作为一个业务处理单元必须完成的职责;另外一个是允许哪一个访问者来访问。我们来看具体元素,如代码清单25-12所示。
1700472213
1700472214 代码清单25-12 具体元素
1700472215
1700472216 public class ConcreteElement1 extends Element{
1700472217
1700472218 //完善业务逻辑
1700472219
1700472220 public void doSomething(){
1700472221
1700472222 //业务处理
1700472223
1700472224 }
1700472225
1700472226 //允许那个访问者访问
1700472227
1700472228 public void accept(IVisitor visitor){
1700472229
1700472230 visitor.visit(this);
[ 上一页 ]  [ :1.700472181e+09 ]  [ 下一页 ]