Observer设计模式与C#委托、事件
2008-03-26 13:03
381 查看
最近新开发了一个内容服务,该服务用于统一管理所有需要静态化的内容,例如:最近需要把个人空间和博客统一成使用相同的模板(都换肤)、这样边栏上的小栏目需要有一个统一的访问点,并且这个访问点是需要静态化数据的,内容服务就是这样的一个访问点。内容服务的具体设计在以后的文章中会有介绍,但是现在先来解决主动更新中的一个问题。
先来看看内容服务的使用方是如何获取内容服务的数据的,调用方需要传入UserName(用户名)、ContentName(内容名称),然后调用后返回的是内容的详细内容。因为UserName和ContentName都可能是多样的,某用户可能会在更新多个不同的内容。在内容服务数据源的提供方的内部实现中,需要为不同的ContentName对变化进行订阅,也就是说当某个方法或者条件被触发了,就会更新订阅这个变化的所有ContentName对应的内容。显然,使用观察者模式就再适合不过了。以下是一下比较标准的Observer模式的实现(参考<<Head First 设计模式>>)。
观察者(Observer):
其实,使用C#的委托与事件也能很好的设计出一个观察者模式,并且可以具有.NET的通用特性。如下就是一个使用委托与事件重写这样的逻辑的代码。
监视对象:
先来看看内容服务的使用方是如何获取内容服务的数据的,调用方需要传入UserName(用户名)、ContentName(内容名称),然后调用后返回的是内容的详细内容。因为UserName和ContentName都可能是多样的,某用户可能会在更新多个不同的内容。在内容服务数据源的提供方的内部实现中,需要为不同的ContentName对变化进行订阅,也就是说当某个方法或者条件被触发了,就会更新订阅这个变化的所有ContentName对应的内容。显然,使用观察者模式就再适合不过了。以下是一下比较标准的Observer模式的实现(参考<<Head First 设计模式>>)。
观察者(Observer):
public abstract class ContentObserver public class SampleContent01Observer : ContentObserver public class SampleContent02Observer : ContentObserver public interface IContentSubject public class ContentSubject : IContentSubject ContentSubject contentSubject = new ContentSubject(); contentSubject.RegisterObserver(new SampleContent01Observer(contentSubject)); contentSubject.RegisterObserver(new SampleContent02Observer(contentSubject)); contentSubject.SendContent("billchen01"); contentSubject.SendContent("billchen02");
其实,使用C#的委托与事件也能很好的设计出一个观察者模式,并且可以具有.NET的通用特性。如下就是一个使用委托与事件重写这样的逻辑的代码。
监视对象:
public class ContentTrigger public class ContentObservers public class ContentChangedEventArgs : EventArgs protected void Page_Load(object sender, EventArgs e) private void trigger_ContentChanged(object sender, ContentTrigger.ContentChangedEventArgs e) { ContentTrigger trigger = (ContentTrigger)sender; Response.Output.Write(String.Format("{0} : {1}<br/>", trigger.IsUpdate, e.UserName)); }
相关文章推荐
- C#委托与事件之观察者Observer设计模式
- c#委托和事件的简单使用,简单介绍observer设计模式
- Observer设计模式与C#委托、事件
- C#,由委托到Observer设计模式,再到事件机制
- 委托、事件与Observer设计模式
- C# 中的委托和事件与Observer设计模式
- c#中的委托、事件、Func、Predicate、Observer设计模式以及其他
- [设计模式]1.Observer观测者模式-按钮事件模拟
- c#中的委托、事件、Func、Predicate、Observer设计模式以及其他
- Observer 设计模式 了解委托与事件的使用
- 事件触发、分发、observer机制----消息总线架构模式(中介者(调停者)设计模式)
- 事件和委托:第 5 页 委托、事件与Observer设计模式
- C#,由委托到Observer设计模式,再到事件机制
- Observer 设计模式(委托和事件的使用)
- c#中的委托、事件、Func、Predicate、Observer设计模式以及其他
- 委托、事件与Observer设计模式
- C#中的委托和事件--5.委托、事件与Observer设计模式
- 委托和事件 及Observer设计模式简介
- 转载:C#中委托、事件与Observer设计模式
- 【设计模式】observer观察者模式:模拟java.awt.Button事件监听。