需要解决的问题:
作用于某一个对象群时,对象本身不变化,对象可以通过与它交互的对象获取不同的行为。
具体事例:
当你去银行办理业务的时候,会发现银行内部开设了不同的窗口(普通业务、代办业务、基金保险等等),你可以根据实际的需要选择自己需要的窗口办理业务。比如:你去了普通窗口,工作人员会认为你就是来办理普通业务的;而你去了代办业务窗口,工作人员会认为你就是来办理代办业务的;否则你就失去错了窗口。
具体实施步骤:
1、定义一个对象群,此处容易误解,可以这样说:定义一个容纳所有业务需要的对象。
2、定义一个接口,处理对象群与固定对象的业务关系。
3、实现固定对象与对象群的对象交互,定义所有的业务实现。
代码模板:
对象群,即对象的所有业务需要。
对象群与固定对象的交互接口。
固定对象业务实现。
测试代码:
执行结果:
A service
B service
C service
说明:
Visitor(访问者)模式,名字听起来像一个与自己无关的类,我只知道我来是想干什么,但是怎么干已经有人提前准备好了,这是从Visitor的角度分析。而从提供给Visitor服务的角度看,就像一个固定死死的东西,不管来的人是谁,我只管给它提供一种统一的服务。
就是一个观光客的感觉。
计划好了去游玩什么地方,而这些地方已经时刻准备着为你的到来服务。当然你到了华山,它也不可能给你提供黄山的感觉,你只能欣赏华山了。玩笑而已。
希望不吝指教,谢谢。
作用于某一个对象群时,对象本身不变化,对象可以通过与它交互的对象获取不同的行为。
具体事例:
当你去银行办理业务的时候,会发现银行内部开设了不同的窗口(普通业务、代办业务、基金保险等等),你可以根据实际的需要选择自己需要的窗口办理业务。比如:你去了普通窗口,工作人员会认为你就是来办理普通业务的;而你去了代办业务窗口,工作人员会认为你就是来办理代办业务的;否则你就失去错了窗口。
具体实施步骤:
1、定义一个对象群,此处容易误解,可以这样说:定义一个容纳所有业务需要的对象。
2、定义一个接口,处理对象群与固定对象的业务关系。
3、实现固定对象与对象群的对象交互,定义所有的业务实现。
代码模板:
对象群,即对象的所有业务需要。
public class Visitor {
public void process(AService service) {
System.out.println("A service");
}
public void process(BService service) {
System.out.println("B service");
}
public void process(CService service) {
System.out.println("C service");
}
}
对象群与固定对象的交互接口。
public interface Service {
public void doService(Visitor visitor);
}
固定对象业务实现。
public class AService implements Service {
public void doService(Visitor visitor) {
visitor.process(this);
}
}
public class BService implements Service{
public void doService(Visitor visitor) {
visitor.process(this);
}
}
public class CService implements Service {
public void doService(Visitor visitor) {
visitor.process(this);
}
}
测试代码:
public class Test {
public static void main(String[] args) {
Service a = new AService();
Service b = new BService();
Service c = new CService();
Visitor visitor = new Visitor();
a.doService(visitor);
b.doService(visitor);
c.doService(visitor);
}
}
执行结果:
A service
B service
C service
说明:
Visitor(访问者)模式,名字听起来像一个与自己无关的类,我只知道我来是想干什么,但是怎么干已经有人提前准备好了,这是从Visitor的角度分析。而从提供给Visitor服务的角度看,就像一个固定死死的东西,不管来的人是谁,我只管给它提供一种统一的服务。
就是一个观光客的感觉。
计划好了去游玩什么地方,而这些地方已经时刻准备着为你的到来服务。当然你到了华山,它也不可能给你提供黄山的感觉,你只能欣赏华山了。玩笑而已。
希望不吝指教,谢谢。