Design Pattern - Visitor
JavaScript
class Hero {
constructor(name) {
this.name = name
}
getName() {
return this.name
}
accept(visitor) {
visitor.visit(this)
}
}
class CoolVisitor {
visit(obj) {
obj.getCoolName = () => "JOOOOON"
obj.getSomeRandomNumber = () => Math.round(Math.random() * 100)
}
}
const jon = new Hero("Jon")
console.log(jon.getName())
jon.accept(new CoolVisitor())
console.log(jon.getCoolName(), jon.getSomeRandomNumber())