欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 科技 > IT业 > 编程-设计模式 24:访问者模式

编程-设计模式 24:访问者模式

2024/10/24 11:14:39 来源:https://blog.csdn.net/qq_45831414/article/details/141088438  浏览:    关键词:编程-设计模式 24:访问者模式

设计模式 24:访问者模式

定义与目的
  • 定义:访问者模式表示一个作用于某对象结构中的各元素的操作。它使你可以在不改变各元素的类的前提下定义作用于这些元素的新操作。
  • 目的:该模式的主要目的是分离算法与对象结构,使得可以独立地改变对象结构和作用于这些对象上的操作。
实现示例

假设我们有一个图形编辑器,需要支持不同的图形类型和操作。我们可以使用访问者模式来实现这个需求。

// 抽象元素
interface Shape {void accept(Visitor visitor);
}// 具体元素 - 圆形
class Circle implements Shape {@Overridepublic void accept(Visitor visitor) {visitor.visit(this);}
}// 具体元素 - 矩形
class Rectangle implements Shape {@Overridepublic void accept(Visitor visitor) {visitor.visit(this);}
}// 抽象访问者
interface Visitor {void visit(Circle circle);void visit(Rectangle rectangle);
}// 具体访问者 - 绘制访问者
class DrawVisitor implements Visitor {@Overridepublic void visit(Circle circle) {System.out.println("Drawing circle...");}@Overridepublic void visit(Rectangle rectangle) {System.out.println("Drawing rectangle...");}
}// 具体访问者 - 打印访问者
class PrintVisitor implements Visitor {@Overridepublic void visit(Circle circle) {System.out.println("Printing circle information...");}@Overridepublic void visit(Rectangle rectangle) {System.out.println("Printing rectangle information...");}
}// 对象结构
class ShapeCollection {private List<Shape> shapes = new ArrayList<>();public void addShape(Shape shape) {shapes.add(shape);}public void accept(Visitor visitor) {for (Shape shape : shapes) {shape.accept(visitor);}}
}// 客户端代码
public class Client {public static void main(String[] args) {ShapeCollection collection = new ShapeCollection();collection.addShape(new Circle());collection.addShape(new Rectangle());Visitor drawVisitor = new DrawVisitor();collection.accept(drawVisitor);Visitor printVisitor = new PrintVisitor();collection.accept(printVisitor);}
}
使用场景
  • 当你需要在不改变对象结构中的元素类的前提下定义新的操作时。
  • 当一个对象结构包含多种类型的元素,你想对这些元素执行不同的操作时。
  • 当你需要在对象结构上定义多个操作,并且这些操作都与这些对象有关时。

访问者模式通过分离算法与对象结构,使得可以独立地改变对象结构和作用于这些对象上的操作。这对于需要在不改变对象结构中的元素类的前提下定义新的操作的场景非常有用。

小结

访问者模式是一种常用的行为型模式,它可以帮助你分离算法与对象结构,使得可以独立地改变对象结构和作用于这些对象上的操作。这对于需要在不改变对象结构中的元素类的前提下定义新的操作的场景非常有用。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com