Java中有23种设计模式,为应用程序设计中常见问题提供了明确定义的解决方案。它代表了应用程序及其流程的详细描述。它是一个可以在许多不同情况下使用的问题解决方案。通过提供经过测试的开发范例,它加快了开发过程。本文讨论访问者设计模式。
概述
这是一种行为设计模式。它管理对象之间的算法、关系和责任。它用于在运行时对一组类似的对象执行操作。它将操作与对象结构解耦。使用访问者模式,我们可以在不改变现有代码的情况下轻松地向现有的类层次结构添加新的行为。有时,它也被称为行为模式(behavioral pattern)。
访问者模式的主要目标是将操作逻辑从对象移动到另一个类中。使用访问者模式,我们可以实现开闭原则。根据GoF,访问者设计模式被定义为:
访问者模式是一种操作对象结构中元素的操作方法。它允许您定义一个新的操作,而无需更改要操作的元素的类。
下图描述了访问者设计模式的概念。
访问者模式实际上创建了一个使用其他类中数据的外部类。当需要对一组不同的对象执行操作时,我们可以使用该模式。它为类提供了附加功能,而无需修改它。
有两种在访问者模式中使用的最重要的方法。accept()方法接受一个访问者。它由Visitable类提供。visit()方法在每次访问一个元素时被调用。它由Visitor类实现。
案例
访问者模式最常见的例子是在超市购物。在超市里,我们挑选商品并将它们放入购物车。当我们将所有必需品都放入购物车后,我们会去收银台结账。收银员会检查我们挑选的所有商品,并告诉我们需要支付的总金额。在这里,收银员充当访问者的角色。
适用场景
如果应用程序满足以下条件,则应使用访问者设计模式:
- 如果我们有一组明确定义的需要访问的类。
- 对这些类进行的操作没有明确定义或提前被知道。例如,如果有人在使用你的API,并且你想给消费者一种添加新的临时功能到对象的方式。它们也是一种方便的方式,可以为密封类添加临时功能。
- 你需要对一组对象进行操作,并且想要避免在运行时进行类型测试。这通常发生在遍历具有不同属性的不同对象层次结构时。