观察者模式例子
控件按钮、报警器等都是观察者模式。
public interface Subject {
//添加观察者
void attach(Observer o);
//删除观察者
void detach(Observer o);
//通知观察者
void notifyObservers();
//发生某事
void doSomeThings()
}
//观察者
public interface Observer {
void update();
}
public class ConcreteSubject implements Subject {
ArrayList<Observer> observers = new ArrayList<>();
@Override
public void attach(Observer o) {
observers.add(o);
}
@Override
public void detach(Observer o) {
observers.remove(o);
}
@Override
public void notifyObservers() {
for (Observer o : observers) {
o.update();
}
}
public void doSomeThings(){
//doSomeThings
notifyObservers();//通知观察者
}
}
//具体观察者
public class ConcreteObserver implements Observer {
@Override
public void update() {
System.out.println("我观察到subject发生了某事");
}
}
public static void main(String[] args) {
Subject cs = new ConcreteSubject();
//添加观察者
cs.attach(new ConcreteObserver());
//subject发生了某事,通知观察者
cs.doSomeThings();
}
输出结果: