观察者模式 (Observer Pattern) 是一种行为型设计模式,又被称为发布-订阅 (Publish/Subscribe) 模式,它定义了对象之间的一种一对多的依赖关系,使得当一个对象的状态发生变化时,所有依赖于它的对象都会自动收到通知并更新。
在观察者模式中有如下角色:
1、Observer

- package com.xu.demo.observerPattern;
-
- /**
- * 观察者接口
- */
- public interface Observer {
-
- void update(String message);
- }
2、ConcreteObserver

- package com.xu.demo.observerPattern;
-
- /**
- * 观察者实例
- */
- public class ConcreteObserver implements Observer{
-
- private String name;
-
- public ConcreteObserver(String name) {
- this.name = name;
- }
-
- @Override
- public void update(String message) {
- System.out.println(name + ": " + message);
- }
- }
3、Subject

- package com.xu.demo.observerPattern;
-
- /**
- * 主题接口
- */
- public interface Subject {
-
- //添加订阅者(观察者对象)
- void attach(Observer observer);
-
- //删除订阅者
- void detach(Observer observer);
-
- //通知订阅者更新消息
- void notify(String message);
- }
4、SubscriptionSubject
- package com.xu.demo.observerPattern;
-
- import java.util.ArrayList;
- import java.util.List;
-
- /**
- * 主题操作类
- */
- public class SubscriptionSubject implements Subject{
-
- //定义一个集合,用来存储多个观察者对象
- private List
observerList = new ArrayList<>(); -
- @Override
- public void attach(Observer observer) {
- observerList.add(observer);
- }
-
- @Override
- public void detach(Observer observer) {
- observerList.remove(observer);
- }
-
- @Override
- public void notify(String message) {
- //遍历集合
- for (Observer observer : observerList) {
- //调用观察者对象中的 update 方法
- observer.update(message);
- }
- }
- }
-
5、ObserverPattern

- package com.xu.demo.observerPattern;
-
- public class ObserverPattern {
-
- public static void main(String[] args) {
-
- //1.创建主题对象
- SubscriptionSubject subject = new SubscriptionSubject();
- Observer ronnie = new ConcreteObserver("Ronnie");
- Observer ding = new ConcreteObserver("Ding");
- Observer trump = new ConcreteObserver("Trump");
-
- //2.观察者订阅主题
- subject.attach(ronnie);
- subject.attach(ding);
- subject.attach(trump);
-
- //3.更新主题
- subject.notify("Java专栏更新了!");
-
- System.out.println("====================我是分割线==================");
- //4.观察者取消订阅主题
- subject.detach(ding);
- subject.detach(trump);
-
- //5.更新主题
- subject.notify("Python专栏更新了!");
-
- }
-
- }
运行结果:

至此,一个最简单的 发布-订阅 (Publish/Subscribe) 模式代码实例就完成了,大家认真理解好好体会,你也能成为IT高手,我们下回再见。