主要将数据结构与数据操作分离
主要解决:稳定的数据结构和易变的操作耦合问题。
何时使用:需要对一个对象结构中的对象进行很多不同的并且不相关的操作,而需要避免让这些操作”污染”这些对象的类,使用访问者模式将这些封装到类中。
如何解决:在被访问的类里面加一个对外提供接待访问者的接口。
案例
比如老师家访学生,不同科目的老师就是访问者,通过学生的描述,老师对同一个学生做出一个判断
// 元素类class Student {constructor(name, chinese, math, english) {this.name = namethis.chinese = chinesethis.math = maththis.english = english}accept(visitor) {visitor.visit(this)}}// 访问者类class ChineseTeacher {visit(student) {console.log(`语文${student.chinese}`)}}class MathTeacher {visit(student) {console.log(`数学${student.math}`)}}class EnglishTeacher {visit(student) {console.log(`英语${student.english}`)}}// 实例化元素类const student = new Student('张三', 90, 80, 60)// 实例化访问者类const chineseTeacher = new ChineseTeacher()const mathTeacher = new MathTeacher()const englishTeacher = new EnglishTeacher()// 接受访问student.accept(chineseTeacher)student.accept(mathTeacher)student.accept(englishTeacher)
