首页 > 代码库 > 设计模式学习之观察者模式(Observer,行为型模式)(7)
设计模式学习之观察者模式(Observer,行为型模式)(7)
1.观察者模式又叫做发布-订阅模式。
2.观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态发生变化时,会通知所有观察者对象,使它们能够自动更新自己。
3.使用观察者模式的好处:维护相关对象间的一致性。我们不希望为了维持一致性而使各类紧密耦合,这样会给维护、扩展和重用都带来不便。
什么时候使用观察者模式:当一个对象的改变需要同时改变其他对象的时候,而且它不知道具体有多少对象有待改变时,应该考虑使用观察者模式。
private static void Main(string[] args) { Boss boss = new Boss(); boss.Update += new StockObserver("股票哥", boss).CloseStockMarket; boss.Update += new NBAObserver("NBA哥", boss).CloseNBADirectSeeding; boss.SubjectState = "老板回来了。。。"; boss.Notify(); } /// <summary> /// 通知者接口 /// </summary> public interface ISubject { void Notify(); string SubjectState { get; set; } } public delegate void EventHandler(); public class Boss : ISubject { public event EventHandler Update; public void Notify() { if (Update != null) { Update(); } } public string SubjectState { get; set; } } /// <summary> /// 前台秘书类 /// </summary> public class Secretary : ISubject { public event EventHandler Update; public void Notify() { if (Update != null) { Update(); } } public string SubjectState { get; set; } } /// <summary> /// 看股票的同事 /// </summary> public class StockObserver { private string name; private ISubject subject; public StockObserver(string name, ISubject subject) { this.name = name; this.subject = subject; } public void CloseStockMarket() { Console.WriteLine("{0} {1} 关闭股票行情,继续工作!", subject.SubjectState, name); } } /// <summary> /// 看NBA的同事 /// </summary> public class NBAObserver { private string name; private ISubject subject; public NBAObserver(string name, ISubject subject) { this.name = name; this.subject = subject; } public void CloseNBADirectSeeding() { Console.WriteLine("{0} {1} 关闭NBA直播,继续工作!", subject.SubjectState, name); } }
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。