【原创】设计模式面对面之观察者模式
观察者模式
观察者模式主要涉及两种对象:观察目标对象,观察对象。
类图:
常用的实现方式:
目标对象
//观察目标 public class Target { private readonly string _content; private readonly List<Observer> _observers; public Target() { _observers=new List<Observer>(); _content = "今天不用上班了!!"; Register(); } public void Notify(){ _observers.ForEach(x => { x.Receive(_content); }); } private void Register(){ var observer1 = new Observer("observer1"); var observer2 = new Observer("observer2"); var observer3 = new Observer("observer3"); _observers.Add(observer1); _observers.Add(observer2); _observers.Add(observer3); } }//end Target
观察对象
//观察对象 public class Observer { private readonly string _name; public Observer(string name) { _name = name; } public void Receive(string content){ Console.WriteLine($"{_name}收到:{content}"); } }//end Observer
调用:
class Program { static void Main(string[] args) { //观察者 var target = new Target(); target.Notify(); Console.ReadLine(); } }
使用场景:
观察者模式事先已经知道要通知那些对象了这是和订阅模式的主要区别,两者如何选择根据场景判断。