监听者模式

摘要:
四人组笔记:监听者模式1.一对多的关系2.subject触发多个observe的更新3.注意pull和push数据的方式。代码规范:改变老代码的地方,需要封装针对接口编程游戏中服务器和客户端的通信,可理解为监听者模式...本测试:三个observe,使用数据pull,使用条件判断,使用输出模拟subject的更新1namespaceDesignModeTest2{3classProgram4{5staticvoidMain6{7WeatherInfoClassweatherInfo=newWeatherInfoClass();8TemperatureClasstemperatureTips=newTemperatureClass();9HumClasshumTips=newHumClass();10WeatherClassweatherTips=newWeatherClass();1112weatherInfo.AddObserver;13weatherInfo.AddObserver;14weatherInfo.AddObserver;1516weatherInfo.Updata;17weatherInfo.Updata;18weatherInfo.Updata;1920}2122enumWeatherType23{24Sun=1,//晴25Cloudy=2,//阴26Rain=3//雨27}28interfaceMySubject//被监听者需要有的29{30voidAddObserver;31voidChangeData();32voidRemoveObserver;33}34///35///可监听者36///37classWeatherInfoClass:MySubject38{39privateconstintLimitTemperature=20;40privateintmTemperature;//温度41privateintmHum;//湿度42privateWeatherTypemWeather;4344privateListmObserverList=newList();4546#region监听者拉pull数据需要47publicintGetTemperature()48{49returnmTemperature;50}5152publicintGetHum()53{54returnmHum;55}5657publicWeatherTypeGetWeather()58{59returnmWeather;60}61#endregion6263privateboolIsChange()64{65if66{67returntrue;68}69returnfalse;70}7172publicvoidUpdata73{74mTemperature=temperature;75mHum=hum;76mWeather=weathertype;7778if79{80ChangeData();81}82}838485publicvoidAddObserver86{87if(!

四人组笔记:监听者模式

1.一对多的关系

2.subject触发多个observe的更新

3.注意pull和push数据的方式。 本例使用pull,监听者按需获取数据,

4.添加subject是否需要通知observe的条件判断,IsChange() 63行。

代码规范:

改变老代码的地方,需要封装

针对接口编程

游戏中服务器和客户端的通信,可理解为监听者模式...

监听者模式第1张

本测试:三个observe,使用数据pull,使用条件判断,使用输出模拟subject的更新

1 namespaceDesignModeTest
2 {
3 classProgram
4 {
5 static void Main(string[] args)
6 {
7 WeatherInfoClass weatherInfo = newWeatherInfoClass();
8 TemperatureClass temperatureTips = newTemperatureClass();
9 HumClass humTips = newHumClass();
10 WeatherClass weatherTips = newWeatherClass();
11 
12 weatherInfo.AddObserver(temperatureTips);
13 weatherInfo.AddObserver(humTips);
14 weatherInfo.AddObserver(weatherTips);
15 
16 weatherInfo.Updata(10, 1, WeatherType.Cloudy);
17 weatherInfo.Updata(30, 2, WeatherType.Sun);
18 weatherInfo.Updata(1, 1, WeatherType.Rain);
19 
20 }
21 
22 enumWeatherType
23 {
24 Sun = 1,//
25 Cloudy = 2,//
26 Rain = 3//
27 }
28 interfaceMySubject //被监听者需要有的
29 {
30 voidAddObserver(MyObserver obj);
31 voidChangeData();
32 voidRemoveObserver(MyObserver obj);
33 }
34 /// <summary>
35 ///可监听者
36 /// </summary>
37 classWeatherInfoClass : MySubject
38 {
39 private const int LimitTemperature = 20;
40 private int mTemperature;//温度
41 private int mHum;//湿度
42 privateWeatherType mWeather;
43 
44 private List<MyObserver> mObserverList = new List<MyObserver>();
45 
46 #region 监听者拉pull数据需要
47 public intGetTemperature()
48 {
49 returnmTemperature;
50 }
51 
52 public intGetHum()
53 {
54 returnmHum;
55 }
56 
57 publicWeatherType GetWeather()
58 {
59 returnmWeather;
60 }
61 #endregion
62 
63 private boolIsChange()
64 {
65 if (mTemperature <LimitTemperature)
66 {
67 return true;
68 }
69 return false;
70 }
71 
72 public void Updata(int temperature, inthum, WeatherType weathertype)
73 {
74 mTemperature =temperature;
75 mHum =hum;
76 mWeather =weathertype;
77 
78 if(IsChange())
79 {
80 ChangeData();
81 }
82 }
83 
84 
85 public voidAddObserver(MyObserver obj)
86 {
87 if (!mObserverList.Contains(obj))
88 {
89 mObserverList.Add(obj);
90 }
91 }
92 
93 public voidChangeData()
94 {
95 for (int i = 0; i < mObserverList.Count; ++i)
96 {
97 mObserverList[i].Update(this);
98 }
99 }
100 public voidRemoveObserver(MyObserver obj)
101 {
102 mObserverList.Remove(obj);
103 }
104 
105 }
106 
107 
108 interfaceMyObserver
109 {
110 voidUpdate(MySubject subject);
111 voidDisplay();
112 }
113 
114 classTemperatureClass : MyObserver
115 {
116 private intmTemperature;
117 private intmHum;
118 
119 public voidUpdate(MySubject subject)
120 {
121 WeatherInfoClass info = subject asWeatherInfoClass;
122 if (info != null)
123 {
124 mTemperature =info.GetTemperature();
125 mHum =info.GetHum();
126 Display();
127 }
128 }
129 
130 public voidDisplay()
131 {
132 Console.WriteLine("TemperatureClass 温度:" + mTemperature + "湿度:" +mHum);
133 }
134 }
135 
136 classHumClass : MyObserver
137 {
138 private intmHum;
139 public voidUpdate(MySubject subject)
140 {
141 WeatherInfoClass info = subject asWeatherInfoClass;
142 if (info != null)
143 {
144 mHum =info.GetHum();
145 Display();
146 }
147 }
148 
149 public voidDisplay()
150 {
151 Console.WriteLine("HumClass 湿度:" +mHum);
152 }
153 }
154 
155 classWeatherClass : MyObserver
156 {
157 privateWeatherType mWeatherType;
158 public voidUpdate(MySubject subject)
159 {
160 WeatherInfoClass info = subject asWeatherInfoClass;
161 if (info != null)
162 {
163 mWeatherType =info.GetWeather();
164 
165 Display();
166 }
167 }
168 
169 public voidDisplay()
170 {
171 Console.WriteLine("WeatherClass 天气:" +mWeatherType);
172 }
173 }
174 
175 }
176 }
177  

免责声明:文章转载自《监听者模式》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Windows消息机制详解transformer-encoder用于问答中的意图识别下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

随便看看

注册支付宝沙箱并测试支付宝扫码连接

2.创建新的支付宝应用程序2.1下载支付宝生成软件密钥#访问“支付宝开发平台”登录并访问开发者中心https://open.alipay.com/platform/home.htm#您可以参考“计算机网站支付”来熟悉计算机支付的整个流程https://docs.open.alipay.com/270/105899/2.1步骤1:创建应用程序(此处使用沙盒环境...

layui 学习笔记(四) 复杂表头前台Excel导出

merges':mergeConf,'!cols':colConf,'!rows‘:rowConf}});}@...

海康SDK编程指南(C#二次开发版本)

海康SDK编程指南目前使用的海康SDK包括IPC_SDK,Plat_SDK(平台),其中两套SDK都需单独调用海康播放库PlayCtrl.dll来解码视频流,返回视频信息和角度信息。本文仅对视频监控常用功能的使用进行说明,其它未实现功能请参看设备网络SDK使用手册和播放库编程指南V7.2。IPC_SDK编程指南(一)SDK的引用由于IPC_SDK没有SDK安...

Foxyproxy 火狐代理插件

Firefox上的插件Autoproxy一直很难使用。它永远不能更新规则,但foxyproxy可以替代它。用鼠标中键单击foxyproxy图标以在不同的代理方法之间切换。foxyproxy图标从foxhead变为蓝色,因为内容传输发生在网页中,该传输通过默认代理服务器,默认代理的初始颜色为蓝色。...

windows下mstsc 远程Ubuntu 教程

为远程桌面控制设置Ubuntu 16.04的缺点是重新启动系统需要使用监视器登录系统。首先,我们将Ubuntu远程控制设置为允许远程连接,进入系统-˃首选项-˃桌面共享,或直接搜索桌面共享。如图所示,选中此项,然后选中安全项,并设置远程密码。...

登陆脚本

#!' num_ count+=1其他:lock_ input(用户名)#############1##########_###!...