设计模式:回调作为方法参数

时间:2014-10-28 11:21:41

标签: java design-patterns methods callback method-parameters

我想知道为方法参数中的操作定义回调是否比在对象中定义它并通过setter设置更糟糕,关于设计模式。

我不确定是否存在关于回调创作的设计模式。

例如,让我们说有一些A类,我想用一些回调来执行一个方法M.

public class A {
    public interface Callback {
        void onEvent();
    }
    public static methodM(...) {
        // ...
    }
}

我可以这样做:

public static void methodM(Callback c) {
    c.onEvent();
}
// ...
A.method(this); // The class that calls the method is the callback!

而不是:

public static void setCallback(Callback callback) {
    this.callback = callback;
}
public static void methodM() {
    this.callback.onEvent();
}
// ...
A.setCallback(this); // The class that calls the method is the callback!
A.method(); 

请注意,该方法的事实是静态的,只是为了方便理解场景。

那么,我可以将第一种方法用作有效的设计吗?

使用第一个场景的原因是为了避免内存泄漏,因为很容易为多次执行定义简单的回调,因为我必须使用列表,观察者等来控制回调列表。

2 个答案:

答案 0 :(得分:1)

我认为没有“回调模式”,它太通用了。

然而,许多设计模式都使用回调,例如Observer patternVisitor pattern

这取决于程序的全局架构

那段代码

public static void methodM(Callback c) {
    c.onEvent();
}
// ...
A.method(this); // The class that calls the method is the callback!

不打扰我,如果像这样出现,这不是禁止的事情

答案 1 :(得分:1)

我不认为它不是模式问题,而是一些原则建议将回调存储在类字段中。

  • 单一责任原则:不要告诉A他必须做什么。
  • 得墨忒耳法则:没有人知道A必须做什么工作。
  • Open Close原则:您可能希望某天在某些其他情况下调用Callback。

还有其他一些原则,但我认为这些原则是最重要的。