设计模式---观察者模式
观察者模式主要是为了松耦合,通俗的讲是发布订阅,适用于消息通知的场景。
1、定义
观察者模式定义了对象之间的一对多依赖,这样一来,当一个对象改变状态时,它的所有依赖者都会收到通知并自动更新。
2、UML
3、案例
定义主题接口:
- package ilan.Observer;
- public interface Subject {
- void registerObserver(Observer observer);
- void removeObserver(Observer observer);
- void notifyObservers();
- }
定义主题实现类:
- package ilan.Observer;
- import java.util.ArrayList;
- import java.util.List;
- public class ConcreteSubject implements Subject {
- private List<Observer> observers = new ArrayList<>();
- @Override
- public void registerObserver(Observer observer) {
- observers.add(observer);
- }
- @Override
- public void removeObserver(Observer observer) {
- observers.remove(observer);
- }
- @Override
- public void notifyObservers() {
- for (Observer o : observers) {
- o.update("消息通知");
- }
- }
- }
定义观察者接口:
- package ilan.Observer;
- public interface Observer {
- void update(String message);
- }
定义观察者实现类:
- package ilan.Observer;
- public class ConcreteObserver1 implements Observer {
- @Override
- public void update(String message) {
- System.out.println("观察者1接收到" + message);
- }
- }
- package ilan.Observer;
- public class ConcreteObserver2 implements Observer {
- @Override
- public void update(String message) {
- System.out.println("观察者2接收到" + message);
- }
- }
编写测试程序:
- package ilan.Observer;
- public class MainClass {
- public static void main(String[] args) {
- Subject subject = new ConcreteSubject();
- Observer c1 = new ConcreteObserver1();
- Observer c2 = new ConcreteObserver2();
- subject.registerObserver(c1);
- subject.registerObserver(c2);
- subject.notifyObservers();
- }
- }
测试结果:
观察者1接收到消息通知
观察者2接收到消息通知