Visitor Design Pattern Java2025年5月5日 | 阅读7分钟 Java 中有 23 种设计模式,它们为应用程序设计中常见的问题提供了明确的解决方案。它代表了应用程序及其流程的详细描述。它是可以在许多不同情况下使用的问题的解决方案。通过提供经过验证的开发范例,它提高了开发过程的速度。在本节中,我们将重点关注 Java 中的访问者设计模式。 访问者模式它是一种行为设计模式。它管理对象之间的算法、关系和职责。它用于在运行时对一组相似的对象执行操作。它将操作与对象结构分离。使用访问者模式,我们可以在不更改现有代码的情况下轻松地向现有类层次结构添加新行为。有时,它也称为行为模式。 这些设计模式提供了关于类对象通信的所有信息。这些是专门处理对象之间通信的模式。 因此,访问者模式的主要目标是将操作逻辑从对象移到另一个类。使用访问者模式,我们可以实现开闭原则。根据 GoF,访问者设计模式定义为: 表示要在对象结构元素上执行的操作。访问者允许您在不更改其操作的元素类的情况下定义新操作。 下图描述了访问者设计模式的概念。 ![]() 访问者模式实际上创建了一个使用其他类数据的外部类。当我们需要在各种不同的对象上执行操作时,可以使用此模式。它在不修改类的情况下为其提供附加功能。 访问者模式中使用了两个最重要的方法。accept() 方法接受一个访问者。它由 Visitable 类提供。visit() 方法在每次访问元素时都会被调用。它由 Visitor 类实现。 访问者设计模式示例访问者模式最常见的例子是在超市购物。在超市,我们挑选商品并将其添加到购物车中。当我们收集完所有必需的商品到购物车后,我们就去收银台结账。收银员检查我们挑选的所有商品,并告诉我们应付的总金额。这里,收银员充当访问者。 何处以及何时使用它?如果应用程序满足以下条件,则应使用访问者设计模式:
设计组件访问者模式有五个主要组件:
优点
缺点
Java 中访问者设计模式的实现让我们为接受检查的车辆设计一个模式,检查员计算每辆车的服务费以及包括所有车辆在内的总服务费。 ![]() 在以下示例中,首先,我们将创建两个名为 Vehicle 和 VehicleInspector 的接口。 Vehicle.java VehicleInspector.java 在这里,我们将创建五个名为 Car.java、Van.java、Moterbike.java、VehicleInspection.java 和 VehicleService.java 的 Java 类。Car、Van 和 Motorbike 类实现了 Vehicle 接口。这些是正在进行维护的车辆。 Car.java Motherbike.java Van.java VehicleInspection.java VehicleService.java 创建完所有接口和 Java 类后,项目目录将如下所示: ![]() 输出 Service Charge for Car: 100 Service Charge for Van: 500 Service Charge for Motorbike: 50 Total Service Charge: 650 因此,使用访问者模式的目的是提供所有已实现的元素功能。如果我们想添加无限数量的复杂功能,就可以使用它。 |
LU 分解 LU 分解,也称为 LU 因子分解。它是数值线性代数中的一种基本技术,其中一个方阵被分解为一个下三角矩阵 L 和一个上三角矩阵 U。对于 n×n 矩阵 A,目标是将其表示为...
11 分钟阅读
给定一个具有 N 行 M 列的二维数组 ARR,其中每个元素都包含 0 或 1 的值,将给定的矩阵转换为一个“好”矩阵。在“好”矩阵中,如果一个元素为 0,则其行和列中的所有元素都应...
5 分钟阅读
Java 中聚合和组合的区别 对象是现实世界的实体,对象在编程或现实生活中都存在相互关系。对象通过多种关系相互关联,例如聚合、组合、关联等。让我们理解聚合之间的区别...
阅读 8 分钟
一维 (1D) 数组是一种线性数据结构,它将相同数据类型的元素存储在连续的内存位置中。基本术语 数组元素:数组的项称为其元素,它们存储在数组中,并且可以通过...随机访问。
7 分钟阅读
对于遍历或搜索图结构,基本方法是深度优先搜索 (DFS)。它对于许多图论任务(如路径查找、循环检测、连接测试等)至关重要,因为它在...
5 分钟阅读
哈希函数是一个键值映射函数。当两个或多个键通过这些哈希方法映射到相同值时,就会存在重复值。链式哈希的使用可以解决冲突。每个哈希表单元都应该指向条目链表…
阅读 6 分钟
java.nio.FloatBuffer 类有一个 duplicate() 函数。要创建共享 supplied buffer 内容的新 float buffer,请使用 FloatBuffer 类。此 buffer 的内容将构成新 buffer。新 buffer 将反映对此 buffer 所做的更改……
阅读 4 分钟
问题陈述给定一个二进制字符串,我们需要找到给定二进制字符串中 0 和 1 的最大差值。在这里,我们将 0 视为 +1,将 1 视为 -1,然后寻找连续子数组的最大值。这个子数组的最大和……
阅读 4 分钟
由相同数字非平凡地组成的偶数称为 Zygodrome。这意味着如果相同的数字总是成对地出现在数字中,那么该数字就称为 Zygodrome。Zyg 是一个希腊词,意思是联合或...
5 分钟阅读
Java 提供的按位运算符之一是 XOR。XOR(也称为异或)接收两个布尔操作数,如果它们不同则返回 true。当提供的两个布尔条件不能同时为真时,XOR 运算符就是...
7 分钟阅读
我们请求您订阅我们的新闻通讯以获取最新更新。
我们提供所有技术(如 Java 教程、Android、Java 框架)的教程和面试问题
G-13, 2nd Floor, Sec-3, Noida, UP, 201301, India