设计模式学习笔记——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服务的角度看,就像一个固定死死的东西,不管来的人是谁,我只管给它提供一种统一的服务。
就是一个观光客的感觉。
计划好了去游玩什么地方,而这些地方已经时刻准备着为你的到来服务。当然你到了华山,它也不可能给你提供黄山的感觉,你只能欣赏华山了。玩笑而已。
希望不吝指教,谢谢。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值