我们使用了一个访问者类,它改变了元素类的执行算法。通过这种方式,元素的执行算法可以随着访问者改变而改变。
大概就是,老师家访学生,不同科目的老师,对同一个学生的评价是不一样的。
class Teacher {
evaluate(student) {}
}
class ChineseTeacher extends Teacher {
evaluate(student) {
const grade = student.getChinese()
const evaluate = grade >= 60 ? grade >= 90 ? '优秀' : '一般' : '不及格'
console.log(`${student.name}的学习${evaluate}`)
}
}
class MathematicsTeacher extends Teacher {
evaluate(student) {
const grade = student.getMathematics()
const evaluate = grade >= 60 ? grade >= 90 ? '优秀' : '一般' : '不及格'
console.log(`${student.name}的学习${evaluate}`)
}
}
class EnglishTeacher extends Teacher {
evaluate(student) {
const grade = student.getEnglish()
const evaluate = grade >= 60 ? grade >= 90 ? '优秀' : '一般' : '不及格'
console.log(`${student.name}的学习${evaluate}`)
}
}
class Student {
constructor(name, chinese, mathematics, english) {
this.name = name
this.chinese = chinese
this.mathematics = mathematics
this.english = english
}
getChinese() {
return this.chinese
}
getMathematics() {
return this.mathematics
}
getEnglish() {
return this.english
}
}
const student = new Student('王大锤', 90, 60, 0)
const chineseTeacher = new ChineseTeacher()
const mathematicsTeacher = new MathematicsTeacher()
const englishTeacher = new EnglishTeacher()
chineseTeacher.evaluate(student)
mathematicsTeacher.evaluate(student)
englishTeacher.evaluate(student)