观察者模式
观察者模式(Observer)
1 概念
1、定义
- 定义了对象之间的一对多依赖,让多个观察者对象同时监听某一个主题对象,当主题对象发生变化时,它的所有依赖都会受到通知并更新。
2、优点
- 符合开闭原则。
- 可以在运行时建立对象之间的关系。
3、源码中的应用
- JDK:
java.util.Observable
- Spring:
org.springframework.context.ApplicationListener
2 实现
package com.xianhuii.designpattern; import java.util.ArrayList; import java.util.List; public class ObserverTest { public static void main(String[] args) { Subject subject = new Subject(); Task1 task1 = new Task1(); subject.addObserver(task1); Task2 task2 = new Task2(); subject.addObserver(task2); subject.notifyObserver("xxx"); System.out.println("=========="); subject.removeObserver(task1); subject.notifyObserver("yyy"); } } class Subject { // 容器 private List<Observer> container = new ArrayList<>(); // add public void addObserver(Observer observer) { container.add(observer); } // remove public void removeObserver(Observer observer) { container.remove(observer); } public void notifyObserver(Object object) { for (Observer observer: container) { observer.updata(object); } } } interface Observer { void updata(Object object); } class Task1 implements Observer { @Override public void updata(Object object) { System.out.println("task1 received:" + object); } } class Task2 implements Observer { @Override public void updata(Object object) { System.out.println("tast2 received:" + object); } }