zhangdizhangdi

访问者模式

定义

访问者模式(Visitor Pattern),使用了一个访问者类,它改变了元素类的执行算法。通过这种方式,元素的执行算法可以随着访问者改变而改变。

实现

js
// 元素类
class Student {
  constructor(name, chinese, math, english) {
    this.name = name
    this.chinese = chinese
    this.math = math
    this.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)
执行结果
语文90
数学80
英语60

参考