JAVA观察者模式-案例

Java观察者模式

java 复制代码
import java.util.ArrayList;  
import java.util.List;  
  
// 主题接口,定义了添加、删除观察者等方法  
interface Subject {  
    void register(Observer observer);  
    void unregister(Observer observer);  
    void notifyObservers(String message);  
}  
  
// 具体主题类,实现了主题接口,并维护了一个观察者列表  
class ConcreteSubject implements Subject {  
    private List<Observer> observers = new ArrayList<>();  
    private String message;  
  
    @Override  
    public void register(Observer observer) {  
        observers.add(observer);  
    }  
  
    @Override  
    public void unregister(Observer observer) {  
        observers.remove(observer);  
    }  
  
    @Override  
    public void notifyObservers(String message) {  
        this.message = message;  
        for (Observer observer : observers) {  
            observer.update(message);  
        }  
    }  
}  
  
// 观察者接口,定义了观察者更新方法  
interface Observer {  
    void update(String message);  
}  
  
// 具体观察者类,实现了观察者接口,并实现了更新方法  
class ConcreteObserver implements Observer {  
    private String name;  
  
    public ConcreteObserver(String name) {  
        this.name = name;  
    }  
  
    @Override  
    public void update(String message) {  
        System.out.println(name + " received message: " + message);  
    }  
}  
  
// 测试类,创建主题和观察者对象,并测试通知功能  
public class Test {  
    public static void main(String[] args) {  
        Subject subject = new ConcreteSubject();  // 创建主题对象  
        Observer observer1 = new ConcreteObserver("Observer 1");  // 创建观察者1对象  
        Observer observer2 = new ConcreteObserver("Observer 2");  // 创建观察者2对象  
        subject.register(observer1);  // 主题添加观察者1  
        subject.register(observer2);  // 主题添加观察者2  
        subject.notifyObservers("Hello World!");  // 主题通知所有观察者更新,输出"Observer 1 received message: Hello World!"和"Observer 2 received message: Hello World!"  
        subject.unregister(observer1);  // 主题移除观察者1,此时只有观察者2存在,通知输出"Observer 2 received message: Hello World!"  
        subject.notifyObservers("Hello Java!");  // 主题通知所有观察者更新,只有观察者2收到了消息,输出"Observer 2 received message: Hello Java!"。由于移除了观察者1,因此没有输出"Observer 1 received message: Hello Java!"。  
    }  
}
相关推荐
TDengine (老段)26 分钟前
TDengine 免费版说明
java·大数据·数据库·物联网·时序数据库·tdengine
码上有光30 分钟前
异常和智能指针
java·大数据·c++·servlet·异常·智能指针
学计算机的计算基1 小时前
操作系统内存管理全解:虚拟内存、页表、COW、malloc、OOM一篇搞定
java·笔记·算法
tachibana21 小时前
hot100 前 K 个高频元素(347)
java·数据结构·算法·leetcode
万亿少女的梦1682 小时前
基于Spring Boot、Java与MySQL的网络订餐系统设计与实现
java·spring boot·mysql·系统设计·网络订餐
触底反弹2 小时前
🤯 面试被问 AI Workflow 和 Agent 有啥区别?3 张图 + 2 段代码讲清楚!
人工智能·设计模式·面试
咩咩啃树皮10 小时前
第40篇:Vue3组件化开发精讲——组件拆分、复用、父子通信、工程化架构
java·前端·架构
鱟鲥鳚11 小时前
Spring Boot 集成 LangChain4j:从模型调用到 Tool Calling(Demo版)
java·spring boot
大模型码小白12 小时前
【Python零基础教程】继承、多态与魔法函数:面向对象编程三大核心特性详解
java·大数据·开发语言·人工智能·python·ai编程
腾渊信息科技公司13 小时前
Spring Boot对接MES实战:视觉检测数据自动同步方案
java·人工智能·spring boot·后端·计算机视觉·ai·软件需求