访问者模式(Visitor Pattern)
|
1 2 3 |
定义:使用一个访问者类,改变元素类的执行算法。通过这种方式,元素的执行算法可以随着访问者改变而改变。 目的:将数据结构与数据操作分离。 场景:您在朋友家做客,您是访问者,朋友接受您的访问,您通过朋友的描述,然后对朋友的描述做出一个判断,这就是访问者模式。 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 |
// 元素:圆形 class Circle { constructor(radius) { this.radius = radius } accept(visitor) { return visitor.visitCircle(this) } } // 元素:矩形 class Rectangle { constructor(width, height) { this.width = width this.height = height } accept(visitor) { return visitor.visitRectangle(this) } } // 访问者:计算面积 class AreaVisitor { visitCircle(circle) { return Math.PI * circle.radius ** 2 } visitRectangle(rectangle) { return rectangle.width * rectangle.height } } // 访问者:计算周长 class PerimeterVisitor { visitCircle(circle) { return 2 * Math.PI * circle.radius } visitRectangle(rectangle) { return 2 * (rectangle.width + rectangle.height) } } // 使用 const rectangle = new Rectangle(3, 4) const circle = new Circle(1) const areaVisitor = new AreaVisitor() const perimeterVisitor = new PerimeterVisitor() console.log(rectangle.accept(areaVisitor)) // 12 console.log(rectangle.accept(perimeterVisitor)) // 14 console.log(circle.accept(areaVisitor)) // 约 3.14 console.log(circle.accept(perimeterVisitor)) // 约 6.28 |

