设计模式之观察者
来源:互联网 发布:中国食品安全数据分析 编辑:程序博客网 时间:2024/04/25 09:15
观察者模式(Observer)
意图:定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时, 所有依赖于它的对象都得到通知并被自动更新。适用性:当一个抽象模型有两个方面, 其中一个方面依赖于另一方面。将这二者封装在独立的对象中以使它们可以各自独立地改变和复用。当对一个对象的改变需要同时改变其它对象, 而不知道具体有多少对象有待改变。当一个对象必须通知其它对象,而它又不能假定其它对象是谁。换言之, 你不希望这些对象是紧密耦合的。
被观察者对象接口: interface IObservable{ void AddObserver(IObserver pObserver); void DeleteObserver(IObserver pObserver); void NotifyObservers(string context); }
被观察者对象实现:public class ObservableA:IObservable{ public void AddObserver(IObserver pObserver){ m_observerList.Add (pObserver); } public void DeleteObserver(IObserver pObserver){ for (int i = 0; i < m_observerList.Count; i++) { if (m_observerList[i].getName() ==pObserver.getName()) { m_observerList.Remove (m_observerList[i]); } } } public void NotifyObservers(string context){ foreach (var item in m_observerList) { item.Update (context); } } public void HaveFun(){ Console.WriteLine ("have fun!!!"); this.NotifyObservers ("!!!"); } public ObservableA(){ m_observerList = new List<IObserver> (); } private List<IObserver> m_observerList;}
观察者抽象: public abstract class IObserver { public abstract void Update (string context); public abstract string getName (); protected string name; public IObserver(string name){ this.name = name; } }
观察者实现:public class ObserverA:IObserver{ public ObserverA(string name):base(name){} public override void Update (string context){ this.Report (context); } public override string getName (){ return this.name; } private void Report(string report){ Console.WriteLine ("OA:ObservableA hava fun!!!"); }}public class ObserverB:IObserver{ public ObserverB(string name):base(name){} public override void Update (string context){ this.Report (context); } public override string getName (){ return this.name; } private void Report(string report){ Console.WriteLine ("OB:ObservableA hava fun!!!"); }}
测试: public static void Main(string []argv){ ObservableA oba = new ObservableA (); ObserverA oa = new ObserverA ("oa"); ObserverB ob = new ObserverB ("ob"); oba.AddObserver (oa); oba.AddObserver (ob); oba.HaveFun (); oba.DeleteObserver (oa); oba.HaveFun (); }
0 0
- 设计模式之-观察者
- 设计模式之观察者
- 设计模式之观察者
- 设计模式之观察者
- 设计模式之观察者
- 设计模式之观察者
- 设计模式之观察者
- 设计模式之观察者
- 设计模式之观察者
- 设计模式之观察者
- 设计模式之观察者
- 设计模式之观察者模式
- 设计模式之观察者模式
- 设计模式之观察者模式
- 设计模式之观察者模式
- 设计模式之观察者模式
- 设计模式之观察者模式
- 设计模式之观察者模式
- 希尔排序--插值排序
- 套接字选项
- 深入理解RunLoop
- hdoj1108最小公倍数(GCD,LCM)
- LeetCode Integer to English Words(整数转化为英文字母)
- 设计模式之观察者
- MySQL 分区表
- GCD&素数打表&快速判断质数
- JSP九大内置对象及四个作用域
- 社会懒惰-三个和尚没水吃的理论解释
- WKT介绍
- hdu 4390 Number Sequence
- 一个程序员的过去10年的心得体会(时刻提醒自己)
- CodeForces 503A Bar