Код: Выделить всё
public interface IObservable { /* also used version IObservable */
void registerObserver(O o);
void removeObserver(O o);
}
Код: Выделить всё
public abstract class ObservableBase implements IObservable {
protected abstract Set getCollection(O o);
@Override
public void registerObserver(O o) {
getCollection(o).add(o);
}
@Override
public void removeObserver(O o) {
getCollection(o).remove(o);
}
}
Код: Выделить всё
// This is what it'd look like if I just implemented it by hand for generic interface
public ConcreteClass implements IObservable, IObservable {
@Override
public void registerObserver(Observer1 o) {}
@Override
public void registerObserver(Observer2 o) {}
@Override
public void removeObserver(Observer1 o) {}
@Override
public void removeObserver(Observer2 o) {}
}
Код: Выделить всё
public ConcreteClass extends ObservableBase {
protected Set getCollection(Observer1 o) {/*...*/}
protected Set getCollection(Observer2 o) {/*...*/}
}
Подробнее здесь: https://stackoverflow.com/questions/797 ... ments-an-i