先简单写下观察者模式。观察者模式,又叫做发布-订阅模式。观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态发生变化时,会通知所有观察者对象,是他们能够自动更新自己。
1 /// <summary> 2 /// 发布者接口 3 /// </summary> 4 public interface IPublish 5 { 6 void Notify(); 7 string Status { set; get; } 8 }
1 /// <summary> 2 /// 具体的发布者 3 /// </summary> 4 public class PublishA:IPublish 5 { 6 private string status; 7 //发布的事件,供观察者订阅 8 public NotifyEventHandle OnNotify; 9 public void Notify() 10 { 11 if (OnNotify != null) 12 { 13 OnNotify(new NotifyEventArgs { Status = this.Status }); 14 } 15 } 16 17 public string Status 18 { 19 get 20 { 21 return this.status; 22 } 23 set 24 { 25 this.status = value; 26 } 27 } 28 }
public delegate void NotifyEventHandle(NotifyEventArgs eventArgs); public class NotifyEventArgs : EventArgs { public string Status { set; get; } } /// <summary> /// 具体的订阅者 /// </summary> public class SubscriberA { public void Update(NotifyEventArgs eventArgs) { Console.WriteLine("SubscriberA被发布者通知了!发布者的状态变为:"+eventArgs.Status); } } /// <summary> /// 具体的订阅者 /// </summary> public class SubscriberB { public void Update(NotifyEventArgs eventArgs) { Console.WriteLine("SubscriberB被发布者通知了!发布者的状态变为:" + eventArgs.Status); } }
1 private void button1_Click(object sender, EventArgs e) 2 { 3 PublishA publish = new PublishA(); 4 SubscriberA subscriber1 = new SubscriberA(); 5 SubscriberB subscriber2 = new SubscriberB(); 6 //订阅者1订阅了发布者的事件。 7 publish.OnNotify += new NotifyEventHandle(subscriber1.Update); 8 publish.OnNotify += new NotifyEventHandle(subscriber2.Update); 9 10 publish.Status = "AAA"; 11 publish.Notify(); 12 }
在MVP架构中。UI界面(V)会发布一系列的事件(此时UI就是具体的发布者),提供给presenter(P)订阅(此时Presenter就是具体的观察者)。
在MVP中处理业务逻辑都是有Presenter去做。但是具体什么时候去处理呢,那就是当UI发生了变化(点击了按钮等)的时候,触发了事件,此时通知了其订阅者,也就是观察者。观察者就会自动的触发业务逻辑的处理。