Шаблон наблюдателя API Java: субъект, если расширенный

В встроенном API Java для шаблона Observer мы должны расширить класс Observable, чтобы стать "внедренным" объектом. Я хотел бы знать, расширяю ли я класс, реализующий "Observable", также станет "Subject\Observable", и если это так, то он унаследует всех наблюдателей от родителя?

Пример: класс A расширяет наблюдаемый

Класс B расширяет A

Итак, B также является наблюдаемым/субъектом?

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();
 }
 }
}

licensed under cc by-sa 3.0 with attribution.