设计模式—观察者模式
1.概述
在对象之间定义了一对多依赖,当一个对象改变状态,依赖它的对象都会收到通知,并自动更新。
2.类图
3.角色
- Observer :观察者,用来监听Subject。
- Subject: 观察者观察的主题,可以注册观察者,删除观察者和当观察者观察的事情发生变化通知观察者。
- myObserver: 观察者的具体实现类。
- DataSubject: 具体的主题类。
4.实现
功能:当主题的data发生变化时,通知观察者,观察者输出变化后data的值。
1.Subject接口
//主题接口
public interface Subject {
public void registerObserver(Observer observer);
public void deleteObserver(Observer observer);
public void notifyObservers();
}
2.Observer接口
//观察者接口
public interface Observer {
public void update(int data);
}
3.DataSubject类
public class DataSubject implements Subject{
List<Observer> Observers;
int data;
DataSubject(){
Observers = new ArrayList<Observer>();
}
public void registerObserver(Observer observer) {
Observers.add(observer);
}
public void deleteObserver(Observer observer) {
Observers.remove(observer);
}
public void notifyObservers() {
for(Observer o : Observers){
o.update(data);
}
}
public void setData(int data){
this.data = data;
notifyObservers();
}
}
4.myObserver类
public class myObserver implements Observer{
Subject subject;
myObserver(Subject subject){
this.subject = subject;
subject.registerObserver(this);
}
public void update(int data) {
print(data);
}
public void print(int data){
System.out.println(this.toString()+": "+data);
}
}
5.测试
public class main {
public static void main(String[] args) {
DataSubject subject = new DataSubject();
Observer observer = new myObserver(subject);
subject.setData(10);
subject.setData(100);
}
}
当主题的data从0变为10,和从10变为100时,观察者感受到了变化,并输出变化后的值。