观察者模式

定义

观察者模式,顾名思义就是观察者对某事物进行观察,当事物状态改变(符合条件)时,通知所有的订阅者,使他们做出对应的反应。

一般可以通过类之间的引用调用来实现、也可以通过事件订阅的方式实现。

类实现方式的类图

类实现方式的代码

 1  public class Subject
 2     {
 3         public string State { get; set; }
 4     }
 5 
 6     public class Notifier
 7     {
 8         public IList<Observer> observers = null;
 9         private Subject subject=null;
10         public Notifier(Subject subject)
11         {
12             this.subject = subject;
13             observers = new List<Observer>();
14         }
15         public void ChangeState(string state)
16         {
17             subject.State = state;
18             foreach (var item in observers)
19             {
20                 item.Reflect();
21             }
22         }
23     }
24     public abstract class Observer
25     {
26         //TODO other property...
27 
28         /// <summary>
29         /// 
30         /// </summary>
31         public abstract void Reflect();
32         
33     }
34     public class ObserverA : Observer
35     {
36         public override void Reflect()
37         {
38             Console.WriteLine("A got it");
39         }
40     }
41     public class ObserverB : Observer
42     {
43         public override void Reflect()
44         {
45             Console.WriteLine("B see it");
46         }
47     }
View Code

事件通知形式

 1    public delegate void NotifyHandler();
 2     public class Subject
 3     {
 4         public string State { get; set; }
 5     }
 6     public class Notifier
 7     {
 8         public event NotifyHandler Nofify;
 9         private Subject subject = null;
10         public Notifier(Subject subject )
11         {
12             this.subject=subject;
13         }
14         public void OnChangeState(string state)
15         {
16             subject.State = state;
17             if (Nofify != null)
18             {
19                 Nofify();
20             }
21         }
22     }
23     public class Observer
24     {
25         public Observer(Notifier notifier)
26         {
27             notifier.Nofify += notifier_Nofify;
28         }
29 
30         void notifier_Nofify()
31         {
32             //TODO...reflect
33         }
34     
View Code

总结

观察者模式,着重于条件触发点到达时对一类对象进行通知,已达到广播通知的效果。

关于类实现、还是事件订阅方式的实现,主要看功能业务,事件订阅方式简化了代码,同时也比较明了。而类实现则增加了耦合,并且要求订阅者有统一基类或者接口,但定义类的功能有时可以照顾到其他的业务实现。

 

转载于:https://www.cnblogs.com/Joy-et/p/4873362.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值