2

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

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

例如,假设有一些类 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(); 

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

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

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

4

2 回答 2

1

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

然而,许多设计模式使用回调,如观察者模式访问者模式

这将取决于您的程序的全局架构

那段代码

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

不打扰我,如果像这样呈现,这不是禁止的

于 2014-10-28T11:39:36.570 回答
1

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

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

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

于 2014-10-28T11:51:06.357 回答