当前位置: 首页 > news >正文

设计模式(11)观察者模式

一、概述:

1、定义:观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态发生变化时,会通知所有观察者对象,使它们能够自动更新自己。

2、结构图:

image-20211217230639846

public interface Subject {void registerObserver(Observer observer);void unregisterObserver(Observer observer);void notifyObservers();
}
public interface Observer {void update();
}

实现

import java.util.ArrayList;
import java.util.List;public class ConcreteSubject implements Subject {private List<Observer> observers = new ArrayList<>();private int state;public int getState() {return state;}public void setState(int state) {this.state = state;notifyObservers();}@Overridepublic void registerObserver(Observer observer) {observers.add(observer);}@Overridepublic void unregisterObserver(Observer observer) {observers.remove(observer);}@Overridepublic void notifyObservers() {for (Observer observer : observers) {observer.update();}}
}
public class ConcreteObserver implements Observer {private int observerState;private ConcreteSubject subject;public ConcreteObserver(ConcreteSubject subject) {this.subject = subject;this.subject.registerObserver(this);}@Overridepublic void update() {observerState = subject.getState();System.out.println("Observer state updated: " + observerState);}
}

 调用

public class Main {public static void main(String[] args) {ConcreteSubject subject = new ConcreteSubject();ConcreteObserver observer1 = new ConcreteObserver(subject);ConcreteObserver observer2 = new ConcreteObserver(subject);subject.setState(10);// 输出:// Observer state updated: 10// Observer state updated: 10subject.setState(20);// 输出:// Observer state updated: 20// Observer state updated: 20subject.unregisterObserver(observer2);subject.setState(30);// 输出:// Observer state updated: 30}
}

http://www.lryc.cn/news/140505.html

相关文章:

  • 开源的安全性:挑战与机会
  • wireshark 流量抓包例题重现
  • Smartbi电子表格软件版本更新,首次推出Excel轻应用和语音播放
  • ElasticSearch简介、安装、使用
  • Navicat 连接 mysql 问题
  • Adobe Media Encoder软件安装包分享(附安装教程)
  • [C#][原创]操作注册表一些注意点
  • “华为杯”研究生数学建模竞赛2016年-【华为杯】C题:基于无线通信基站的室内三维定位问题
  • 双目视觉之-棋盘格标定板制作
  • 自然对数底e的一些事
  • React Hooks 全解:零基础入门
  • webrtc在js里的实现
  • 熊猫:完整的初学者指南
  • 【Go】Go语言并发编程:原理、实践与优化
  • HTTPS协议加密原理
  • L1-034 点赞(Python实现) 测试点全过
  • MySQL 存储过程 循环处理数据 while repeat
  • 基于配置类方式管理 Bean
  • 最新CMS指纹识别技术
  • 快速入门学习记录:常用代码、特定函数、复杂概念和特定功能说明
  • 【win视频播放器】HEVC视频扩展
  • React+Typescript 父子组件事件传值
  • python人工智能和机器学习
  • [PyTorch][chapter 51][Auto-Encoder -1]
  • Uniapp或者微信小程序如何动态的计算Scrollview的高度
  • Abase数据库管理系统
  • 系统架构设计高级技能 · 大数据架构设计理论与实践
  • ubuntu上使用osg3.2+osgearth2.9
  • C语言巧妙打印64位整数
  • c语言每日一练(11)