Observer观察者设计模式
Observer设计模式主要包括以下两种对象:
(1)被观察对象:Subject,它往往包含其他对象感兴趣的东西,上面例子中热水器中就是Subject(被监视对象);
(2)观察对象:Observer,它观察着Subject,当Subject中的某件事发生后,会告知Observer,Obersver会采取相应的行动。上面例子中显示器和报警器就是观察对象,当油箱中温度大于95°时,报警器和显示器就会做出相应的警报;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks; namespace ObserverApp
{
class Program
{
static void Main(string[] args)
{
Oil o = new Oil();
o.BoiledEvent += new Alarm().MakeAlarm;//先往Oil对象中注册事件
o.BoiledEvent += new Display().ShowMsg;//先往Oil对象中注册事件
o.BoilWater();//执行主要方法,等到条件合适在触发上面注册的事件
}
} /// <summary>
/// Subject被观察对象 ---Oil热水器
/// </summary>
internal class Oil
{
/// <summary>
/// 牌子
/// </summary>
public string brand = "Nick"; /// <summary>
/// 价格
/// </summary>
public int price = ; public delegate void BoiledHandler(object obj, EventArgs args);
public event BoiledHandler BoiledEvent; /// <summary>
/// 将观察者感兴趣的信息通过实例传递过去
/// </summary>
public class BoilEventArgs : EventArgs
{
public int Temperature { get; set; }
public BoilEventArgs(int temperature)
{
this.Temperature = temperature;
}
} public void BoilWater()
{
for (int i = ; i <= ; i++)
{
if (i >= )
{
BoilEventArgs args = new BoilEventArgs(i);
BoiledEvent(this, args);//当温度达到95度及以上的时候,触发所有订阅该事件的观察者的方法
}
}
}
} /// <summary>
/// Observer观察对象 ---警报器
/// </summary>
internal class Alarm
{
public void MakeAlarm(object sender,EventArgs args)
{
Oil o = (Oil)sender;
ObserverApp.Oil.BoilEventArgs a = (ObserverApp.Oil.BoilEventArgs)args;
Console.WriteLine("Alarm:嘀嘀嘀,水已经 {0} 度了,当前热水器的牌子是{1},价格是{2}",a.Temperature, o.brand, o.price);
}
} /// <summary>
/// Observer观察对象 ---显示器
/// </summary>
internal class Display
{
public void ShowMsg(object sender, EventArgs args)
{
Oil o = (Oil)sender;
ObserverApp.Oil.BoilEventArgs a = (ObserverApp.Oil.BoilEventArgs)args;
Console.WriteLine("Display:水已烧开,当前温度:{0}度,当前热水器的牌子是{1},价格是{2}", a.Temperature, o.brand, o.price);
Console.ReadKey();
}
}
}
Observer观察者设计模式的更多相关文章
- 十七、 Observer 观察者设计模式
设计: 代码清单: Observer public interface Observer { void update(NumberGenerator generator); } DigitObserv ...
- Observer(观察者)设计模式[转]
Observer设计模式中主要包括如下两类对象: Subject:监视对象,它往往包含着其他对象所感兴趣的内容.在本范例中,热水器就是一个监视对象,它包含的其他对象所感兴趣的内容,就是tempratu ...
- (java)从零开始之--观察者设计模式Observer
观察者设计模式:时当一个对象发生指定的动作时,要通过另外的对象做出相应的处理. 步骤: 1. A对象发生指定的动作是,要通知B,C,D...对象做出相应的处理,这时候应该把B,C,D...对象针对A对 ...
- 《Head First设计模式》批注系列(一)——观察者设计模式
最近在读<Head First设计模式>一书,此系列会引用源书内容,但文章内容会更加直接,以及加入一些自己的理解. 观察者模式(有时又被称为模型-视图(View)模式.源-收听者(List ...
- Java常用类库——观察者设计模式
观察者设计模式 现在很多的购房者都在关注着房子的价格变化,每当房子价格变化的时候,所有的购房者都可以观察得到.实际上以上的购房者都属于观察者,他们都关注着房子的价格. 如果要想实现观察者模式,则必须依 ...
- java学习之观察者设计模式
package com.gh.observer; import java.util.Observable; /** * 被观察者对象 * 必须继承被观察者抽象类 * @author ganhang * ...
- Unity 3D观察者设计模式-C#委托和事件的运用
C#观察者设计模式 本文提供全流程,中文翻译. Chinar 坚持将简单的生活方式,带给世人!(拥有更好的阅读体验 -- 高分辨率用户请根据需求调整网页缩放比例) Chinar -- 心分享.心创新! ...
- IOS设计模式第七篇之观察者设计模式
版权声明:原创作品,谢绝转载!否则将追究法律责任. 观察者设计模式 在观察者设计模式里面,一个对象通知其他的对象一些状态的改变.涉及这些对象不需要知道另一个对象---因此鼓励解耦设计模式.这个设计模式 ...
- java: 观察者模式:Observable被观察者,Observer观察者
java: 观察者模式:Observable被观察者,Observer观察者 以房子价格为例,卖房者为被观察者: import java.util.Observable; //被观察者子类化 publ ...
随机推荐
- Redis - 事务(multi,exec,watch,unwatch)
转载自:https://blog.csdn.net/wgh1015398431/article/details/53156027:加了一些自己的注解 1.事务 1.1 概述 Redis中的事务(tra ...
- Android draw Rect 坐标图示
前两天在博客发了在例子 android Canvas类介绍 http://byandby.javaeye.com/blog/825330 建议大家 点进去 看一看 不然下边没办法 继续啊. 我还是把这 ...
- 7) mvn dependency:tree
http://maven.apache.org/plugins/maven-dependency-plugin/tree-mojo.html mvn dependency:tree 查看 <de ...
- day08(File类 ,字节流)
File类 构造方法 File(String path); FIle(String parent, String child); File(File parent, String child) ...
- (二分匹配“匈牙利算法”)无题II --HDU --2236
链接: http://acm.hdu.edu.cn/showproblem.php?pid=2236 代码: #include<cstdio> #include<cstring> ...
- java代码中存在的Big Endian 和 Little Endian
Big Endian 和 Little Endian 详解 Java中的Big(Little)-endian问题的一种解决方法 主机序和网络序 很重要很重要 几种ip存放形式 Big-Endian和 ...
- 洛谷P3567[POI2014]KUR-Couriers(主席树+二分)
题意:给一个数列,每次询问一个区间内有没有一个数出现次数超过一半 题解: 最近比赛太多,都没时间切水题了,刚好日推了道主席树裸题,就写了一下 然后 WA80 WA80 WA0 WA90 WA80 ?? ...
- Back to December -- Taylor Swift
Back to December 泰勒·斯威夫特(Taylor Swift),美国乡村音乐女创作歌手,会用木吉他.钢琴演奏. 曾获得美国乡村音 ...
- jquery添加select option两种代码思路比较
功能需求:在客户选择了check_in_date和check_out_date之后,将在check_in_date至check_out_date的promotions中自动添加符合条件的promoti ...
- MVC-1.1 BundleConfig-ScriptBundle
App_Start中的BudleCnfig.cs中 bundles.Add(new ScriptBundle("~/bundles/jquery").Include( " ...