Java API的观察者模式:主题如果扩展

时间:2014-11-03 21:46:11

标签: design-patterns observer-pattern java-api

在用于Observer Pattern的Java内置API中,我们必须将Observable类扩展为\ implement“subject”。我想知道我是否扩展了实现“Observable”的类也将成为“Subject \ Observable”,如果是这样,它会继承父级的所有观察者吗?

Ex:A类扩展了Observable

B类延伸A

所以B也是Observable / subject?

1 个答案:

答案 0 :(得分:1)

是的,你是绝对正确的。 如果A类扩展Observable而B类扩展A,它确实使B类可观察。 您应该可以使用以下示例测试代码对此进行测试。

import java.util.Observable;

import java.util.Observer;

public class TestObserve extends Object {
    MyView view;
    TestObservableA testObservableA;
    TestObservableB testObservableB;
    public TestObserve() {

        view = new MyView();

        testObservableA = new TestObservableA();
        testObservableA.addObserver(view);

        testObservableB = new TestObservableB();
        testObservableB.addObserver(view);
    }

    public static void main(String[] av) {
        TestObserve testObserve = new TestObserve();
        testObserve.testExtend();
    }

    public void testExtend() {
        testObservableA.changeSomething();
        testObservableB.changeSomething();
    }

    class MyView implements Observer {
        public void update(Observable observable, Object x) {
            System.out.println("Test Update(" + observable + "," + x + ");");
        }
    }

    class TestObservableA extends Observable {
        public void changeSomething() {
            setChanged();
            notifyObservers();
        }
    }

    class TestObservableB extends TestObservableA {
        public void changeSomething() {
            setChanged();
            notifyObservers();
        }
    }
}