Java设计模式<访问者模式>

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());
    }
}

输出

打开电视机
我得吃个苹果了 

你可能感兴趣的:(Java设计模式<访问者模式>)