登录
/
注册
首页
论坛
其它
首页
科技
业界
安全
程序
广播
Follow
关于
每日签到
每天签到奖励2圆-6圆
发帖说明
VIP申请
登录
/
注册
账号
自动登录
找回密码
密码
登录
立即注册
搜索
搜索
关闭
CSDN热搜
程序园
精品问答
技术交流
资源下载
本版
帖子
用户
软件
问答
教程
代码
写记录
写博客
VIP申请
VIP网盘
网盘
联系我们
每日签到
道具
勋章
任务
设置
我的收藏
退出
腾讯QQ
微信登录
返回列表
首页
›
业界区
›
业界
›
行为型设计模式——观察者模式
行为型设计模式——观察者模式
[ 复制链接 ]
剧拧并
2025-6-6 14:54:29
观察者模式(Observer Pattern)是一种行为型设计模式,通过定义对象间一对多的依赖关系实现状态变化的自动通知机制,广泛应用于解耦事件发布与订阅场景
适用于
①当一个抽象模型有两个方面,其中一个方面依赖于另一个方面。将这两者封装在独立地对象中以使它们可以各自独立地改变和复用。
②当对一个对象的改变需要同时改变其他对象,而不知道具体有多少对象有待改变时。
③当一个对象必须通知其他对象,而它又不能假定其他对象是谁,即:不希望这些对象是紧耦合的。
类图如下:
场景:气象局监测温度
核心代码如下:
1 internal class Program
2 {
3 static void Main(string[] args)
4 {
5 //Console.WriteLine("Hello, World!");
6 //创建具体观察者
7 DisPlay1 disPlay1 = new DisPlay1("显示屏1");
8 DisPlay2 disPlay2 = new DisPlay2("显示屏2");
9 //创建具体被观察者
10 WeatherData weatherData = new WeatherData();
11 weatherData.RedisterObserver(disPlay1);
12 weatherData.RedisterObserver(disPlay2);
13 float temperature = 25;
14 weatherData.SetTemperature(temperature);
15 Console.ReadKey();
16 }
17 }
复制代码
1 internal interface Observer
2 {
3 /// <summary>
4 /// 观察者接口
5 /// </summary>
6 /// <param name="temp">监测对象,具体场景,具体定义参数</param>
7 /// 场景:气象局监测温度
8 void Update(float temp);
9 }
复制代码
1 /// <summary>
2 /// 显示屏
3 /// </summary>
4 internal class DisPlay1 : Observer
5 {
6 private string Name { get; set; }
7 public DisPlay1(string name)
8 {
9 this.Name = name;
10 }
11 public void Update(float temp)
12 {
13 Console.WriteLine($"{Name}当前温度为{temp}摄氏度");
14 }
15 }
复制代码
1 /// <summary>
2 /// 显示屏
3 /// </summary>
4 internal class DisPlay2 : Observer
5 {
6 private string Name { get; set; }
7 public DisPlay2(string name)
8 {
9 this.Name = name;
10 }
11 public void Update(float temp)
12 {
13 Console.WriteLine($"{Name}当前温度为{temp}摄氏度");
14 }
15 }
复制代码
1 internal interface Subject
2 {
3 /// <summary>
4 /// 注册观察者
5 /// </summary>
6 /// <param name="observer"></param>
7 void RedisterObserver(Observer observer);
8 /// <summary>
9 /// 删除观察者
10 /// </summary>
11 /// <param name="observer"></param>
12 void RemoveObserver(Observer observer);
13 /// <summary>
14 /// 通知观察者
15 /// </summary>
16 void NoticeObserver();
17 }
复制代码
View Code
1 /// <summary>
2 /// 气象站
3 /// </summary>
4 internal class WeatherData : Subject
5 {
6 private List<Observer> observers;
7 private float temperature;
8
9 public WeatherData()
10 {
11 observers = new List<Observer>();
12 }
13 public void SetTemperature(float temperature)
14 {
15 this.temperature = temperature;
16 NoticeObserver();
17 }
18 public void NoticeObserver()
19 {
20 observers.ForEach(s => s.Update(temperature));
21 }
22
23 public void RedisterObserver(Observer observer)
24 {
25 //if (observers == null) { }
26 observers.Add(observer);
27 }
28
29 public void RemoveObserver(Observer observer)
30 {
31 observers.Remove(observer);
32 }
33 }
复制代码
View Code
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
行为型
设计模式
观察者
模式
相关帖子
Unity微信小游戏小窗口模式点击适配
结构型模式-架构解耦与扩展实践
行为型模式-协作与交互机制
分层架构模式深度解析
六边形架构模式深度解析
夜莺监控的几种架构模式详解
KMP 模式串匹配算法讲解
设计模式之单例模式
vip免费申请,1年只需15美金$
回复
使用道具
举报
提升卡
置顶卡
沉默卡
喧嚣卡
变色卡
千斤顶
照妖镜
相关推荐
业界
Unity微信小游戏小窗口模式点击适配
0
894
篁瞑普
2025-07-19
业界
结构型模式-架构解耦与扩展实践
0
393
箝德孜
2025-07-21
业界
行为型模式-协作与交互机制
0
101
固拆棚
2025-07-24
安全
分层架构模式深度解析
0
1106
冈欤寨
2025-08-03
业界
六边形架构模式深度解析
0
518
梁宁
2025-08-07
业界
夜莺监控的几种架构模式详解
0
213
阕阵闲
2025-08-14
安全
KMP 模式串匹配算法讲解
0
317
赶塑坠
2025-09-02
安全
设计模式之单例模式
0
77
颖顿庐
2025-09-03
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
|
立即注册
回复
本版积分规则
回帖并转播
回帖后跳转到最后一页
浏览过的版块
安全
签约作者
程序园优秀签约作者
发帖
剧拧并
2025-6-6 14:54:29
关注
0
粉丝关注
22
主题发布
板块介绍填写区域,请于后台编辑
财富榜{圆}
敖可
9984
杭环
9988
凶契帽
9988
4
氛疵
9988
5
黎瑞芝
9988
6
猷咎
9986
7
里豳朝
9986
8
肿圬后
9986
9
蝓俟佐
9984
10
虽裘侪
9984
查看更多