观察者模式
来源:互联网 发布:lsv软件 编辑:程序博客网 时间:2024/04/26 11:51
接观察者模式的经典案例就是订阅模式
接口:
public interface DisplayElement { void display(); }
public interface Observer { void update(float temp,float humidity,float pressure); }
public interface Subject { void registerObserver(Observer o); void removeObserver(Observer o); void notifyObserver(); }
被观察者类:
<pre name="code" class="csharp"> public class WeatherData:Subject { private ArrayList observers; private float temperature; private float humidity; private float pressure; public WeatherData() { observers = new ArrayList(); } public void registerObserver(Observer o) { observers.Add(o); } public void removeObserver(Observer o) { observers.Remove(o); } public void notifyObserver() { foreach (Observer o in observers) { o.update(temperature,humidity,pressure); } } public void measurementsChanged() { notifyObserver(); } public void setMeasurement(float temp,float humidity,float pressure) { this.temperature = temp; this.humidity = humidity; this.pressure = pressure; measurementsChanged(); } }
客户端调用类:
<pre name="code" class="csharp"> public class CurrentConditionDisplay : Observer, DisplayElement { private float temperature; private float humidity; private float pressure; private Subject weatherData; public CurrentConditionDisplay(Subject weatherData) { this.weatherData = weatherData; weatherData.registerObserver(this); } public void update(float temp, float humidity, float pressure) { this.temperature = temp; this.humidity = humidity; this.pressure = pressure; display(); } public void display() { Console.WriteLine("temp:" + temperature + ",humidity:" + humidity + ",pressure:" + pressure); } }
最后执行:
<pre name="code" class="csharp"> static void Main(string[] args) { WeatherData weatherData = new WeatherData(); CurrentConditionDisplay current = new CurrentConditionDisplay(weatherData); weatherData.setMeasurement(2.1f, 3.5f, 5f); CurrentConditionDisplay current2 = new CurrentConditionDisplay(weatherData); weatherData.setMeasurement(5.1f, 3.5f, 5f); weatherData.setMeasurement(7.1f, 6.5f, 6f); Console.ReadKey(); }
0 0
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- HDU 5903 Square Distance
- 【JZOJ 4798】天使的分裂
- spring学习(官网)——解决版本冲突问题
- ul li datalist控件导航栏动态绑定数据库,并且显示相应的内容
- Android全屏沉浸式应用
- 观察者模式
- 玲珑杯 1009 Spoon Devil's Bucket 矩阵优化DP
- 总结:关于字符串长度的问题
- 浅谈HSSF的单元格合并与cell样式
- 光场相机预处理 TFTOOLBOX
- FFT+NTT 学习资料收集
- HDU 1227 Fast Food(dp)
- ASM存储管理
- 2016.9.26