访问者模式是啥?咋实现呀?

简介: 访问者模式是啥?咋实现呀?

一 场景

面试官:简历上写你熟读设计模式,那我问你访问者模式是什么?

杨乐乐:这个..不会(这么冷门,谁知道那是啥)

面试官:再见来不及握手

  杨乐乐,不知道的问题,你清楚吗?我想很多人都不清楚,是的,他的确比较冷门,但我想不常用的东西,不代表没有价值,多了解多学习一点,也有可能是那厚积薄发中最重要的一部分。

  在编程道路上,我向每个人或多或少都有过这样一种体验,我学了很多东西,但是好像都没用到,可是突然有一天,接到一个功能,就是用到了之前了解的技术。也许这就是你的一个机会也说不一定。

  其实对于设计模式而言,是大家都知道的,写代码的利器,但是很多人还是没有仔细研究他,为什么,因为大多数的课程中都没有写设计模式在面试中扮演主要角色,甚至很多技术栈里面也没有。也许这就是行业现状,过多的最新而忽略基础,很多程序员抱着视频如获至宝,但是一场场视频看下来,却发现,学到的大多数是表面,大多数是闻其名,而没有通其理,为什么呢,因为基础不牢,地动山摇,又因为学习编程,需要的不单单是看,更重要的做。

二 访问者模式

  顾名思义,和访问者有关,理解起来就是传入不同的访问者,然后不同的访问者做同一件事,却得到了不同的结果,落实到代码里面就是,不同的访问者,访问同一个方法,但是返回的结果不同,其实并不是同一个方法。

public interface Visitor {

    // 访问学生信息
    void visit(Student student);

    // 访问老师信息
    void visit(Teacher teacher);

}

我们看到 有一个访问者的抽象类,他会访问学生和老师。但是方法的名称是相同的

// 家长
public class Parent implements Visitor {

    private Logger logger = LoggerFactory.getLogger(Parent.class);

    public void visit(Student student) {
        logger.info("学生信息 姓名:{} 班级:{} 排名:{}", student.name, student.clazz, student.ranking());
    }

    public void visit(Teacher teacher) {
        logger.info("老师信息 姓名:{} 班级:{} 级别:{}", teacher.name, teacher.clazz, teacher.identity);
    }

}
public class Principal implements Visitor {

    private Logger logger = LoggerFactory.getLogger(Principal.class);

    public void visit(Student student) {
        logger.info("学生信息 姓名:{} 班级:{}", student.name, student.clazz);
    }

    public void visit(Teacher teacher) {
        logger.info("学生信息 姓名:{} 班级:{} 升学率:{}", teacher.name, teacher.clazz, teacher.entranceRatio());
    }

}

而这访问人呢,一个是家长一个是校长,

下面是被访问者

public class Student extends User {

    public Student(String name, String identity, String clazz) {
        super(name, identity, clazz);
    }

    public void accept(Visitor visitor) {
        visitor.visit(this);
    }

    public int ranking() {
        return (int) (Math.random() * 100);
    }}
}


// 展示
public void show(Visitor visitor) {
    for (User user : userList) {
        user.accept(visitor);
    }
}

这样一个访问者模式的使用就完成了,其中最重要的就是利用了,不同访问者调用同一个方法名所得结果不同。

相关文章
|
21小时前
|
设计模式 Java 机器人
Java设计模式之访问者模式详解
Java设计模式之访问者模式详解
|
1月前
|
设计模式 Java 容器
聊聊Java设计模式-访问者模式
访问者模式(Visitor Pattern)指将作用域某种数据结构中的各元素的操作分离出来封装成独立的类,使其在不改变数据结构的前提下可以添加作用于这些元素的新的操作。
33 3
|
1月前
|
算法
行为型 访问者模式
行为型 访问者模式
20 0
|
7月前
访问者模式
访问者模式
38 0
访问者模式
|
1月前
|
设计模式 uml C++
行为型 迭代器模式
行为型 迭代器模式
25 0
|
8月前
|
设计模式 算法 BI
设计模式~访问者模式(Visitor)-15
在访问者模式(Visitor Pattern)中,我们使用了一个访问者类,它改变了元素类的执行算法。通过这种方式,元素的执行算法可以随着访问者改变而改变。这种类型的设计模式属于行为型模式。根据模式,元素对象已接受访问者对象,这样访问者对
29 0
|
10月前
|
设计模式 Java uml
|
11月前
|
设计模式 Java 关系型数据库
访问者模式解读
访问者模式解读
今天说说你不知道的访问者模式
今天说说你不知道的访问者模式
60 0
|
设计模式
我学会了,访问者模式
访问者模式属于行为型模式,这个类型的设计模式总结出了 类、对象之间的经典交互方式,将类、对象的行为和使用解耦了,花式的去使用对象的行为来完成特定场景下的功能。
95 0
我学会了,访问者模式