基本骨架:
Subject
abstract class Subject {
private List<Observer> observerList = new ArrayList<>();
public void attach(Observer o){observerList.add(o);}
public void detach(Observer o){observerList.remove(o);}
public void inform(){observerList.forEach(o -> o.update(this));}
}Observer
interface Observer {
void update(Subject subject);
}简单模拟实现:
具体事物
class ConstructSubject extends Subject {
private String status;
public String getStatus(){return status;}
public void setStatus(String status){
this.status = status;
this.inform(); // 事物发生变化,通知更新
}
}观察者实现
class ConstructObserver implements Observer {
String status;
@Override
public void update(Subject subject) {
this.status = ((ConstructSubject)subject).getStatus();
}
}总结:Subject在设计模式中占主动地位,Observer可辅助Subject进行额外功能处理
通用代码: