0

我在http://en.wikipedia.org/wiki/Visitor_pattern读到了访问者模式

对这种模式的初步理解给人的印象是访问者模式与桥/策略模式相同。

那么这个具体的例子是否会产生这样的印象?有人可以解释其中的区别吗?可能在 Java 中有明确的例子吗?

4

2 回答 2

1

从 GOF 书中,意图非常不同:

访问者 - 对象行为 - 表示要对对象结构的元素执行的操作。Visitor 允许您定义一个新的操作,而无需更改它所操作的元素的类。

桥 - 对象结构 - 将抽象与其实现分离,以便两者可以独立变化。

策略 - 对象行为 - 定义一系列算法,封装每个算法,并使它们可互换。策略让算法独立于使用它的客户而变化。

周围有很多Java示例。

于 2013-02-04T08:42:16.800 回答
0

桥:

桥将抽象与实现分离。抽象和实现都可以独立变化。

  1. 创建桥实现接口
  2. 创建具体的桥梁实现类
  3. 创建一个包含接口的抽象类(组合是这里的关键)
  4. 创建实现抽象类的具体类

如果您正在寻找示例,请查看tutorialspoint文章。

游客:

Visitor 允许您定义一个新的操作,而无需更改它所操作的元素的类。

根据 GOF 定义:

允许在运行时将一个或多个操作应用于一组对象,从而将操作与对象结构分离。

实施过程如下。

  1. 创建一个类层次结构,在抽象基类中为聚合节点层次结构中的每个具体派生类Visitor定义一个纯虚方法。visit()
  2. 每个visit()方法都接受一个参数 - 指向原始 Element 派生类的指针或引用。
  3. 要支持的每个操作都使用Visitor层次结构的具体派生类建模。现在,通过将原始实现中的“类型查询和转换”代码分配给适当的重载 visit() 方法,在每个派生子类中定义了在访问者基类中声明的visit() 方法。
  4. 将单个纯虚accept()方法添加到 Element 层次结构的基类

对于工作 java 代码,请查看教程点文章和dzone文章。

战略:

策略允许在运行时动态地从一种算法切换到另一种算法(从一系列算法中)

看看这个 SE question 了解更多细节。

策略模式的真实示例

于 2016-02-16T08:23:39.913 回答