首页 > 代码库 > 委托、Lambda表达式、事件系列06,使用Action实现观察者模式
委托、Lambda表达式、事件系列06,使用Action实现观察者模式
在"实现观察者模式(Observer Pattern)的2种方式"中,曾经通过接口的方式、委托与事件的方式实现过观察者模式。本篇体验使用Action实现此模式。
就举一个足球场上的例子,当裁判吹响终场哨,胜队庆祝,失败队落寞。把裁判看作是被观察者,比赛中的两队看作是观察者。
裁判作为被观察者需要提供一个Action委托供观察者方法注册。
public class Referee{public Action DoSth;
public void ISayGameOver(){Console.WriteLine("嘀嘀嘀......比赛结束了~~");
DoSth();}}
胜利的队和失败的队拥有共同的基类。
public class Team{private string _name;public Team(string name){_name = name;}public string Name{get { return _name; }}}
胜利队或失败队,作为观察者,必须有符合Referee中Action定义的方法。
public class WinTeam : Team{public WinTeam(string name) : base(name){}public void Celebrate(){Console.WriteLine("我们晋级了,好开心!");
}}public class LoseTeam : Team{public LoseTeam(string name) : base(name){}public void WeAreSad(){Console.WriteLine("比赛输了,好伤心!");
}}
客户端,先把失败队和胜利队的方法注册到Action变量,然后由被观察者的一个方法触发委托链和方法。
static void Main(string[] args){Referee referee = new Referee();
var winTeam = new WinTeam("胜利队");var loseTeam = new LoseTeam("失败队");//注册观察者
referee.DoSth += winTeam.Celebrate;referee.DoSth += loseTeam.WeAreSad;//被观察者启动事件通知观察者
referee.ISayGameOver();}
“委托、Lambda表达式、事件系列”包括:
委托、Lambda表达式、事件系列01,委托是什么,委托的基本用法,委托的Method和Target属性
委托、Lambda表达式、事件系列02,什么时候该用委托
委托、Lambda表达式、事件系列03,从委托到Lamda表达式
委托、Lambda表达式、事件系列04,委托链是怎样形成的, 多播委托, 调用委托链方法,委托链异常处理
委托、Lambda表达式、事件系列05,Action委托与闭包
委托、Lambda表达式、事件系列06,使用Action实现观察者模式
委托、Lambda表达式、事件系列06,使用Action实现观察者模式
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。