访客模式与策略模式的区别?

时间:2013-02-04 08:22:23

标签: java design-patterns strategy-pattern visitor-pattern bridge

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

初步了解此模式会产生一种印象,即访客模式与Bridge / Strategy模式相同。

创造这种印象的具体例子是什么?有人可以解释这种差异;可能在Java中有明确的例子吗?

2 个答案:

答案 0 :(得分:1)

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

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

Bridge - Object Structural - 将抽象与其实现分离,以便两者可以独立变化。

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

有很多Java示例。

答案 1 :(得分:0)

<强>桥:

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

  1. 创建桥梁实施者界面
  2. 创建具体的桥梁实施者类
  3. 创建一个包含接口的抽象类(Composition是关键)
  4. 创建实现抽象类的具体类
  5. 如果您正在寻找示例,请查看tutorialspoint文章。

    <强>访问者:

    访问者允许您定义新操作,而无需更改其操作元素的类。

    来自GOF定义:

      

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

    实施过程如下。

    1. 创建一个Visitor类层次结构,该层次结构在抽象基类中为聚合节点层次结构中的每个具体派生类定义纯虚拟visit()方法。
    2. 每个visit()方法都接受一个参数 - 指向原始Element派生类的指针或引用。
    3. 要支持的每个操作都使用Visitor层次结构的具体派生类建模。现在,通过分配&#34;类型查询和强制转换&#34;在每个派生子类中定义在Visitor基类中声明的visit()方法。原始实现中的代码到适当的重载的visit()方法。
    4. 将单个纯虚拟accept()方法添加到Element层次结构的基类
    5. 对于工作的java代码,请查看教程点文章和dzone文章。

      <强>策略

      策略允许在运行时动态地从一种算法切换到其他算法(来自一系列算法)

      有关详细信息,请查看此SE问题。

      Real World Example of the Strategy Pattern