あなたが探しているのはproxy patternと呼ばれるものだと思います。
プロキシは (名前が示すように) 現時点では使用できない別のオブジェクトの代わりになるオブジェクトです。
java.util.Observable
この方法を使用して実装することをお勧めします
public class ObservableProxy extends Observable {
private ObservableProxyAdapter observableProxyAdapter = new ObservableProxyAdapter();
private Observable target;
public void setTarget(Observable target) {
if(this.target != null){
// if this proxy was connected to an observer... disconnect
this.target.deleteObserver(observableProxyAdapter);
}
this.target = target;
if(this.target != null){
// If a new target is set... connect to it
this.target.addObserver(observableProxyAdapter);
}
}
private class ObservableProxyAdapter implements Observer {
public void update(Observable o, Object arg) {
// forward notifications from the target
setChanged();
notifyObservers(arg);
}
}
}
お客様に手渡しObservableProxy
ます。クライアントは自分自身を に登録できますObservableProxy
。後で「実際の」Observable が利用可能になったら、それを のターゲットとして設定できますObservableProxy
。プロキシは自身を としてObserver
ターゲットに登録し、通知をオブザーバーに転送します。
+-----------------+ notify +---------------+ notify +--------------+
| real observable | ------> | proxy adapter | ------> | observables |
+-----------------+ +---------------+ | of proxy |
+--------------+
これはアプリケーションの例です
public class ObservableProxyTest {
public static void main(String[] args) {
ObservableProxy observableProxy = new ObservableProxy();
Observer someObserver = new Observer() {
public void update(Observable o, Object arg) {
System.out.println(arg);
}
};
observableProxy.addObserver(someObserver);
// Later the real observer becomes available
RealObservable realProxy = new RealObservable();
observableProxy.setTarget(realProxy);
// notifications will be forwarded
realProxy.notifyHello();
}
private static class RealObservable extends Observable {
public void notifyHello(){
setChanged();
super.notifyObservers("Hello World");
}
}
}