(八)适配器模式详解 (二)

2014-11-24 10:41:11 · 作者: · 浏览: 1


private Observable observable = new Observable();

public synchronized void addObserver(Observer o) {
observable.addObserver(o);
}

public synchronized void deleteObserver(Observer o) {
observable.deleteObserver(o);
}

public void notifyObservers() {
observable.notifyObservers();
}

public void notifyObservers(Object arg) {
observable.notifyObservers(arg);
}

public synchronized void deleteObservers() {
observable.deleteObservers();
}

protected synchronized void setChanged() {
observable.setChanged();
}

protected synchronized void clearChanged() {
observable.clearChanged();
}

public synchronized boolean hasChanged() {
return observable.hasChanged();
}

public synchronized int countObservers() {
return observable.countObservers();
}


}

//我们继承User,组合Observable.
public class ObservableUser extends User{

private Observable observable = new Observable();

public synchronized void addObserver(Observer o) {
observable.addObserver(o);
}

public synchronized void deleteObserver(Observer o) {
observable.deleteObserver(o);
}

public void notifyObservers() {
observable.notifyObservers();
}

public void notifyObservers(Object arg) {
observable.notifyObservers(arg);
}

public synchronized void deleteObservers() {
observable.deleteObservers();
}

protected synchronized void setChanged() {
observable.setChanged();
}

protected synchronized void clearChanged() {
observable.clearChanged();
}

public synchronized boolean hasChanged() {
return observable.hasChanged();
}

public synchronized int countObservers() {
return observable.countObservers();
}


}
我们继承User,而不是继承Observable,这个原因刚才已经说过了,我们不能破坏项目中的继承体系,所以现在可观察的User(ObservableUser)依然处于我们实体的继承体系中,另外如果想让ObservableUser具有User的属性,则需要将User的属性改为protected。

这下好了,我们有了可观察的User了。不过LZ早就说过,设计模式要活用,这里明显不是最好的解决方案。因为我们要是还有Person,Employee类都要具有可观察的功能的话,那其实也相当惨,因为下面那些Observable的方法我们还要再复制一遍。

提示到这里,不知各位想到更好的解决方案了吗?尤其是新手可以好好思考下。

LZ这里给出最终相对来说比较好的解决方案,那就是我们定义如下可观察的基类。

[java]
//我们扩展BaseEntity,适配出来一个可观察的实体基类
public class BaseObservableEntity extends BaseEntity{

private Observable observable = new Observable();

public synchronized void addObserver(Observer o) {
observable.addObserver(o);
}

public synchronized void deleteObserver(Observer o) {
observable.deleteObserver(o);
}

public void notifyObservers() {
observable.notifyObservers();
}

public void notifyObservers(Object arg) {
observable.notifyObservers(arg);
}

public synchronized void deleteObservers() {
observable.deleteObservers();
}

protected synchronized void setChanged() {
observable.setChanged();
}

protected synchronized void clearChanged() {
observable.clearChanged();
}

public synchronized boolean hasChanged() {
return observable.hasChanged();
}

public synchronized int countObservers() {
return observable.countObservers();
}

}

//我们扩展BaseEntity,适配出来一个可观察的实体基类
public c