设计模式(八):观察者模式
概述
观察者模式(Observer Pattern)定义了对象之间的一对多依赖,让多个观察者对象同时监听一个主体对象,主体对象发生变化时,它的所有依赖者(观察者)都会收到通知并更新。
场景介绍
定义一个观察者接口类,同时写两个实现类,作为两种观察者
public interface Observer {
void update(String state);
}
//观察者1:开发人员
public class DevObserver implements Observer{
@Override
public void update(String state) {
System.out.println("开发人员接收到项目状态变化为:"+state);
}
}
//观察者2:项目经理
public class PMObserver implements Observer{
@Override
public void update(String state) {
System.out.println("项目经理接收到项目状态变化为:"+state);
}
}
定义一个抽象主题以及实现类
public interface Subject {
void updateState(String state);
void addObserver(Observer observer);
void removeObserver(Observer observer);
}
//项目创建的主题实现
public class CreateProjectSubject implements Subject{
private List<Observer> observers = new ArrayList<>();
@Override
public void updateState(String state) {
observers.forEach(observer->observer.update(state));
}
@Override
public void addObserver(Observer observer){
observers.add(observer);
System.out.println("添加观察者成功");
}
@Override
public void removeObserver(Observer observer){
observers.remove(observer);
System.out.println("删除观察者成功");
}
}
测试类
public class ObserverTest {
public static void main(String[] args) {
CreateProjectSubject subject = new CreateProjectSubject();
DevObserver dev = new DevObserver();
PMObserver pm = new PMObserver();
subject.addObserver(dev);
subject.addObserver(pm);
subject.updateState("已立项");
/**
* 添加观察者成功
* 添加观察者成功
* 开发人员接收到项目状态变化为:已立项
* 项目经理接收到项目状态变化为:已立项
*/
}
}
总结
事件机制就是观察者模式的一种体现。这种写法的好处在于扩展性好,观察者和被观察者之间建立了一个抽象的耦合。