Java Observer删除自己?

时间:2014-04-24 18:30:39

标签: java observer-pattern

我有一个班级" A"从JFrame扩展,用于显示主菜单(一些按钮)。

我还有另一节课" B"从Observable扩展,其中包含项目的数据。

在" A"我创建了一个对象" B"湾 在" A"我也有一个按钮,当我点击这个按钮时,一个新的课程" C"还从JFrame扩展(并实现了一个Observer)创建并可见。

在A中,当我点击此按钮时,也是这个新框架" C"作为观察者添加到" B"与b.addObserver(c);

现在我的问题: 当我关闭新框架" C" - >我如何从A中的观察者中删除此帧。它可以从该Observerlist中删除吗? 无法在互联网上找到一些东西:/

由于

丹尼尔

1 个答案:

答案 0 :(得分:1)

  

它可以从Observerlist中删除吗?

我认为没有必要删除观察者,因为现在观察者永远不会发布任何事件,但仍然可以删除它,如下面的代码所示。


  • 每当您创建ObserverC对象时,ObservableB都会通过ObservableB来观察它。

  • 现在关闭ObserverC时,只需从ObservableB

  • 中删除观察者

注意:阅读内联评论。

示例代码

class JFrameA extends JFrame {
    ObservableB b;

    public void add() {
        ObserverC c = new ObserverC(b);
    }
}

class ObservableB extends Observable {

}

class ObserverC extends JFrame implements Observer {

    public ObserverC(final Observable observable) {
        // observer is added
        observable.addObserver(this);

        this.addWindowListener(new WindowAdapter() {

            @Override
            public void windowClosed(WindowEvent arg0) {
                // observer is deleted
                observable.deleteObserver(ObserverC.this);
            }
        });
    }

    @Override
    public void update(Observable arg0, Object arg1) {
        ...
    }
}