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

输出

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

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 定义 访问者模式是对象的行为模式。访问者模式的目的是封装一些施加于某种数据结构元素之上的操作。一旦这些操作需要修改...
    步积阅读 1,243评论 0 3
  • Java设计模式之访问者模式 这是设计模式的最后一篇了,希望这个系列的文章会给大家一些帮助。喜欢小伙伴请关注哦!作...
    icyage阅读 191评论 0 0
  • 这种模式主要是为了实现下面一种功能:类的执行可以随着访问者改变而改变。简单实现: 元素类接口,也就是被访问者 具体...
    留给时光吧阅读 249评论 0 0
  • 1 场景问题# 1.1 扩展客户管理的功能## 考虑这样一个应用:扩展客户管理的功能。 既然是扩展功能,那么肯定是...
    七寸知架构阅读 2,960评论 1 58
  • 像你那样的人啊,见怪不怪了四面八方涌来的喜欢,对一切看得清淡,都误以为你触手可及,其实刹那之间就咫尺天涯。 像你那...
    顾闵阅读 346评论 0 1