JavaScript 访问者模式

236 阅读1分钟

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

大概就是,老师家访学生,不同科目的老师,对同一个学生的评价是不一样的。

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)