Java设计模式<访问者模式>
意图
- 将对象的结构和操作分离
角色
- 抽象访问者:抽象类或者接口,声明访问者可以访问哪些元素,具体到程序中就是visit方法中的参数定义哪些对象是可以被访问的
- 访问者:实现抽象访问者所声明的方法,它影响到访问者访问到一个类后该干什么,要做什么事情
- 抽象元素类:接口或者抽象类,声明接受哪一类访问者访问,程序上是通过accept方法中的参数来定义的。抽象元素一般有两类方法,一部分是本身的业务逻辑,另外就是允许接收哪类访问者来访问
- 元素类:实现抽象元素类所声明的accept方法,通常都是visitor.visit(this),基本上已经形成一种定式了
场景
家是一个抽象的概念,家中一台电视机,可以打开和关闭,我们可以设想这样一个场景,Tom 家可以接受Kite来访问,Kite来了之后可以打开电视,然后Kite打开电视之后可以坐在沙发上或者是吃点零食。
定义一个抽象的家
public interface Home {
public void openTV();
public void accept(Visitor visitor);
}
Tom的家
public class TomHome implements Home {
@Override
public void openTV() {
System.err.println("打开电视机");
}
@Override
public void accept(Visitor visitor) {
visitor.visit(this);
}
}
定义访问者
public interface Visitor {
public void visit(Home home);
}
定义Kite
public class KiteVisitor implements Visitor{
@Override
public void visit(Home home) {
home.openTV();
System.err.println("我得吃个苹果了 ");
}
}
测试类
public class DemoMain {
public static void main(String[] args) {
Home tomHome = new TomHome();
tomHome.accept(new KiteVisitor());
}
}
输出
打开电视机
我得吃个苹果了
网友评论