gpt4 book ai didi

java - 访客设计模式意图: misleading or I am missing something?

转载 作者:行者123 更新时间:2023-12-02 05:46:58 26 4
gpt4 key购买 nike

在四人帮的引用书《可重用面向对象软件的设计模式元素》中,访问者模式的意图解释如下:

Represent an operation to be performed on the elements of an object structure. Visitor lets you define a new operation without changing the classes of the elements on which it operates.

我读到的有关访问者模式的另一个优点是:

ADD A NEW OPERATION WITHOUT HAVING THE SOURCE CODE OF THE CLASSES..

我在 Google 中进行了深入搜索,但没有找到任何说明如何执行此操作的示例。让我们举一个简单的例子:

public interface MyInterface {
public void myMethod();
}

public class MyClassA implements MyInterface {

/* (non-Javadoc)
* @see com.mycomp.tutorials.designpattern.behavorials.MyInterface#myMethodA()
*/
public void myMethod() {
System.out.println("myMethodA implemented in MyClassA");

}

}

public class MyClassB implements MyInterface {

/* (non-Javadoc)
* @see com.mycomp.tutorials.designpattern.behavorials.MyInterface#myMethodA()
*/
public void myMethod() {
System.out.println("myMethod implemented in MyClassB");

}

}

那么,如何使用访问者模式将新方法 myNewMethod() 添加到这个类层次结构中而不更改它们?

最佳答案

您的示例不是访问者模式。这只是继承。

访问者模式首先需要访问者接口(interface)

interface ThingVisitor {
void visit(ThingA a);
void visit(ThingB b);
}

现在您需要一个接口(interface)事物:

interface Thing {
void accept(ThingVisitor visitor);
}

例如,您的 ThingA 的实现将是

class ThingA implements Thing {
public void accept(final ThingVisitor visitor) {
visitor.visit(this);
}
}

现在您会看到处理 Thing 类型的逻辑包含在 ThingVisitor 的实现中。

关于java - 访客设计模式意图: misleading or I am missing something?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23968494/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com