实现访问者模式示例,添加形状、访问者及具体实现,增强代码可读性

This commit is contained in:
2026-01-07 20:24:46 +08:00
parent e5be1b62c2
commit a319494128
3 changed files with 228 additions and 0 deletions
+67
View File
@@ -0,0 +1,67 @@
/*
实例:
汤宝宝坚信搭积木是人类的未来,因此开办了一家积木厂。
*/
// 抽象Node接口 Shape
interface Shape {
accept(visitor: Visitor): void;
claimShape(): string;
}
class Circle implements Shape {
accept(visitor: Visitor): void {
visitor.visitCircle(this);
}
claimShape(): string {
return "I am a Circle";
}
}
class Square implements Shape {
accept(visitor: Visitor): void {
visitor.visitSquare(this);
}
claimShape(): string {
return "I am a Square";
}
}
class Triangle implements Shape {
accept(visitor: Visitor): void {
visitor.visitTriangle(this);
}
claimShape(): string {
return "I am a Triangle";
}
}
// 抽象Visitor接口
interface Visitor {
visitCircle(circle: Circle): void;
visitSquare(square: Square): void;
visitTriangle(triangle: Triangle): void;
}
class ShapeVisitor implements Visitor {
visitCircle(circle: Circle): void {
console.log("Visiting Circle: ", circle.claimShape());
}
visitSquare(square: Square): void {
console.log("Visiting Square: ", square.claimShape());
}
visitTriangle(triangle: Triangle): void {
console.log("Visiting Triangle: ", triangle.claimShape());
}
}
(function () {
console.log("========== 访问者模式 ==========");
const shapes: Shape[] = [new Circle(), new Square(), new Triangle()];
const visitor: Visitor = new ShapeVisitor();
shapes.forEach((shape) => {
shape.accept(visitor);
});
console.log("\n======== 访问者模式结束 ========");
})();