假设有一个软件公司,每当有新产品推出,就把信息通知到一些客户。
把通知这个动作抽象成一个接口。
public interface IService{void Notif();}
客户如果想获得通知,就需要实现以上的接口。这里的客户被看作是观察者。
public class CustomerA : IService{public void Notif(){Console.WriteLine("客户A收到通知了~~");}}public class CustomerB : IService{public void Notif(){Console.WriteLine("客户B收到通知了~~");}}
作为软件公司来讲,维护着一个客户的集合,并提供注册、取消注册的方法,往这个集合添加或删除客户。每当有通知的时候,就遍历客户集合,让IService执行通知。软件公司可以看作是一个被观察对象,或者说是发起动作的源头。
public class MyCompany{PRivate IList<IService> subscribers = new List<IService>();public void Subscribe(IService subscriber){subscribers.Add(subscriber);}public void CancelSubscribe(IService subscriber){subscribers.Remove(subscriber);}public void SendMsg(){foreach (IService service in subscribers){service.Notif();}}}
新闻热点
疑难解答