分析详见:http://lvxingzhelimin.blog.163.com/blog/static/1707165502011101655652697/
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
//老板胡汉三
Boss huhansan = new Boss();
//看股票的同事
StockObserver tongshi1 = new StockObserver("魏关拆", huhansan);
NBAObserver tongshi2 = new NBAObserver("易观查", huhansan);
//将“看股票者”的“关闭程序”方法和“看NBA者”的“关闭直播”的方法,
//挂钩到“老板”的“更新”上,也就是将两个不同的类的不同方法委托给“老板”类的“更新”了。
huhansan .Update +=new EventHandler( tongshi1 .CloseStockMarket );
huhansan .Update += new EventHandler( tongshi2 .CloseNBADirectoSeeding );
//老板回来
huhansan.SubjectState = "我胡汉三又回来了!";
//发出通知
huhansan.Notify();
Console.Read();
}
}
}
//通知者接口
interface Subject
{
void Notify();
string SubjectState
{
get;
set;
}
}
//声明一个委托
delegate void EventHandler();
//老板类
class Boss : Subject
{
//声明一个事件Update,类型为EventHandler
public event EventHandler Update;
private string action;
//在访问“通知”方法时,调用“更新”
public void Notify()
{
Update();
}
//老板类的状态
public string SubjectState
{
get { return action; }
set { action = value; }
}
}
//前台类
class Secretary : Subject
{
//在前台类中声明一个委托事件,名称叫Update
public event EventHandler Update;
private string action;
//在访问“通知”方法时,调用“更新”
public void Notify()
{
Update();
}
//前台类的状态
public string SubjectState
{
get { return action; }
set { action = value; }
}
}
//看股票的同事
class StockObserver
{
private string name;
private Subject sub;
//首先建立与继承的父类的最基本的属性设置
public StockObserver(string name, Subject sub)
{
this.name = name;
this.sub = sub;
}
//关闭股票行情
public void CloseStockMarket()
{
Console.WriteLine("{0} {1} 关闭股票行情,继续工作!", sub.SubjectState, name);
}
}
//看NBA的同事
class NBAObserver
{
private string name;
private Subject sub;
public NBAObserver(string name, Subject sub)
{
this.name = name;
this.sub = sub;
}
public void CloseNBADirectoSeeding()
{
Console.WriteLine("{0}{1}关闭NBA,继续工作!", sub.SubjectState, name);
}
}