java - 使用访问者模式和界面有什么区别?

标签 java design-patterns coding-style visitor-pattern

将访问者设计模式应用于您的代码与以下方法有什么区别:

interface Dointerface {
    public void perform(Object o);
}

public class T {
    private Dointerface d;
    private String s;

    public String getS() {
            return s;
    }

    public T(String s) {
            this.s = s;
    }

    public void setInterface(Dointerface d) {
            this.d = d;
    }

    public void perform() {
            d.perform(this);
    }

    public static void main(String[] args) {
            T t = new T("Geonline");
            t.setInterface(new Dointerface() {
                    public void perform(Object o) {
                            T a = (T)o;
                            System.out.println(a.getS());
                    }
            });
            t.perform();
    }
}

我假设通过使用接口(interface),我们并没有真正分离算法。

最佳答案

区别还是挺大的。

访问者模式使用接口(interface),但其目的是能够对一个或多个类(实现接口(interface)的类)执行操作而无需更改类。因此,该实现实际上“访问”了该类并在不修改该类的情况下完成了它的工作。

接口(interface)是一个基本概念,用于为可能不同的类组提供通用 API。接口(interface)的典型测试是共享它的类至少在一个方面是相似的 (is-like-a),在这些情况下可以这样对待。

Here is a simple example on wikipedia that shows a couple of visitors in java.

关于java - 使用访问者模式和界面有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/194382/

相关文章:

c# - 学C#转C/C++?

java - 使用 Java 检查重复文件内容

.net - 在您的应用程序中实现插件的设计模式?

c - 更好地设计子分支 if 语句子条件

javascript - style.display ='none' 不适用于 chrome 中的选项标签,但它适用于 firefox

java - 从输出中确定最大值

java - 无法打印印地文字符

PHP:正确使用单例模式?

c# - 顺序敏感调用的设计模式

c++ - 如何更改一段代码的缩进等?