我在http://en.wikipedia.org/wiki/Visitor_pattern读到了访问者模式
对这种模式的初步理解给人的印象是访问者模式与桥/策略模式相同。
那么这个具体的例子是否会产生这样的印象?有人可以解释其中的区别吗?可能在 Java 中有明确的例子吗?
我在http://en.wikipedia.org/wiki/Visitor_pattern读到了访问者模式
对这种模式的初步理解给人的印象是访问者模式与桥/策略模式相同。
那么这个具体的例子是否会产生这样的印象?有人可以解释其中的区别吗?可能在 Java 中有明确的例子吗?
从 GOF 书中,意图非常不同:
访问者 - 对象行为 - 表示要对对象结构的元素执行的操作。Visitor 允许您定义一个新的操作,而无需更改它所操作的元素的类。
桥 - 对象结构 - 将抽象与其实现分离,以便两者可以独立变化。
策略 - 对象行为 - 定义一系列算法,封装每个算法,并使它们可互换。策略让算法独立于使用它的客户而变化。
周围有很多Java示例。
桥:
桥将抽象与实现分离。抽象和实现都可以独立变化。
如果您正在寻找示例,请查看tutorialspoint文章。
游客:
Visitor 允许您定义一个新的操作,而无需更改它所操作的元素的类。
根据 GOF 定义:
允许在运行时将一个或多个操作应用于一组对象,从而将操作与对象结构分离。
实施过程如下。
Visitor
定义一个纯虚方法。visit()
visit()
方法都接受一个参数 - 指向原始 Element 派生类的指针或引用。Visitor
层次结构的具体派生类建模。现在,通过将原始实现中的“类型查询和转换”代码分配给适当的重载 visit() 方法,在每个派生子类中定义了在访问者基类中声明的visit
() 方法。accept()
方法添加到 Element 层次结构的基类对于工作 java 代码,请查看教程点文章和dzone文章。
战略:
策略允许在运行时动态地从一种算法切换到另一种算法(从一系列算法中)。
看看这个 SE question 了解更多细节。