本文为笔者学习《Head First设计模式》的笔记,并加入笔者自己的理解和归纳总结
观察者模式定义了对象之间一对多依赖,当一个对象改变状态时,它的所有依赖者都会受到通知并自动更新。
结构图
可观察者(Observable
)
public interface Observable {
public void addObserver(Observer observer);
public void removeObserver(Observer observer);
public void notifyObserver();
}
抽象观察者(Observer
)
public interface Observer {
void onChanged(String subject);
}
主题(Subject
)是可被观察的,每次修改都要通知观察者(Observer
)。
public class Subject implements Observable {
private List<Observer> observerList = new ArrayList<>();
private String subject;
@Override
public void addObserver(Observer observer) {
observerList.add(observer);
}
@Override
public void removeObserver(Observer observer) {
observerList.remove(observer);
}
public void setSubject(String subject) {
this.subject = subject;
notifyObserver();
}
@Override
public void notifyObserver() {
for (Observer observer : observerList) {
observer.onChanged(subject);
}
}
}
具体观察者(People
)
public class People implements Observer {
private String name;
public People(String name) {
this.name = name;
}
@Override
public void onChanged(String subject) {
System.out.println(name + " receive new subject: " + subject);
}
}
运行
public static void main(String[] args) {
Subject subject = new Subject();
People jack = new People("Jack");
subject.addObserver(jack);
People mike = new People("Mike");
subject.addObserver(mike);
People lily = new People("Lily");
subject.addObserver(lily);
subject.setSubject("subject1");
subject.setSubject("subject2");
}
输出
观察者和可观察者之间用松耦合方式结合,可观察者不知道观察者的细节,只知道观察者实现了观察者接口。
相关文章
Java 设计模式