说说设计模式~观察者模式(Observer)
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了说说设计模式~观察者模式(Observer),小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1683字,纯文字阅读大概需要3分钟。
内容图文
![说说设计模式~观察者模式(Observer)](/upload/InfoBanner/zyjiaocheng/1072/9bd6cda686164539b505d013d8adcd42.jpg)
观察者模式,也叫发布/订阅模式(publish/subscribe),监视器模式等。在此种模式中,一个目标物件管理所有相依于它的观察者物件,并且在它本身的状态改变时主动发出通知。这通常透过呼叫各观察者所提供的方法来实现。。
何时能用到它?
此种模式通常被用来实现事件处理系统,例如,当一个数据仓储操作中,它的添加功能可能会有一个功能,当添加被触发时,所以订阅了这个添加事件需求的代码 块,都会被触发执行,在这个过程中,数据仓储的添加操作就是被观察者,而所以的订阅者就是它的观察者,发被观察者在某种情况被发起后,所以观察者的代码段 都将被执行。
而对于一个发邮件的功能来说,所有订阅了此功能的模块,只要系统到某个时间点,发邮件的事件就是被触发,此时,所有订阅了此功能的代码模块都会被执行,这种场合,我们见到的不少,如很多网站的新闻订阅,优惠订阅等等,都可以用到它。对于底层开发人员来说,你的CURD操作,如果希望在操作出错后,动态记录日志,事实上,也可以使用这个模式来实现,只要在WEB层或者BLL层订阅一下记录日志的事件即可。
观察者模式的结构图
观察者模式实现说明
SubjectBase:被观察者的基类,它包括了添加观察者,删除观察者,触发观察者的功能
Subject:其中一个被观察者
IObserver:被观察者对象接口,所以被观察者都要实现它,其中SubjectBase也会接收一个IObserver对象,用来触发所有观察者
Observer1:观察者1
Observer2:观察者2
观察者模式的C#实现
#region 观察者模式 ///<summary>/// 被观察者基类 ///</summary>publicabstractclass SubjectBase { private ArrayList _observers = new ArrayList(); publicvoid Add(IObserver o) { _observers.Add(o); } publicvoid Remove(IObserver o) { _observers.Remove(o); } publicvoid Notify() { foreach (IObserver o in _observers) { o.Notify(); } } } ///<summary>/// 被观察者(委托) ///</summary>publicclass Subject : SubjectBase { } ///<summary>/// 观察者实现接口(事件) ///</summary>publicinterface IObserver { void Notify(); } ///<summary>/// 观察者1 ///</summary>publicclass Observer1 : IObserver { publicvoid Notify() { Console.WriteLine("观察者1"); } } ///<summary>/// 观察者2 ///</summary>publicclass Observer2 : IObserver { publicvoid Notify() { Console.WriteLine("观察者2"); } } #endregion
测试代码
Subject subject = new Subject(); subject.Add(new Observer1()); subject.Add(new Observer2()); subject.Notify();
结果如图
原文:http://www.cnblogs.com/lori/p/3891535.html
内容总结
以上是互联网集市为您收集整理的说说设计模式~观察者模式(Observer)全部内容,希望文章能够帮你解决说说设计模式~观察者模式(Observer)所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。