c# 设计模式:观察者模式

观察者模式是我们经常用的一个模式,比如在用wcf做服务的时候通知客户端做一些操作一般用设计者模式。

今天做一个订报纸的小例子来理解一下观察者模式  出版者+订阅者=观察者模式

                                用下边的图来说就是    人民日报+订阅者=观察者模式

只要是订阅了人民日报的人,有了新报纸就会送到订阅者那里去,

当你不想订的时候取消就不订阅就不会再收到报纸了。

下面我们就来用代码实现一下这个模式

?
//报纸接口
    public  interface  INewsPaper
    {
        //添加订阅者
        void  RegisterSubscriber(ISubScribe f_subScribe);
        //取消订阅
        void  RemoveSubScriber(ISubScribe f_subScribe);
        //发送报纸
        void  SendPaper();
    }
 
    //订阅者
    public  interface  ISubScribe
    {
        //有新的报纸了就会被执行通知
        void  HasNewPaper();
    }
 
    //人民日报
    public  class  PeopleNewsPaper : INewsPaper
    {
        private  List<ISubScribe> subList = new  List<ISubScribe>();
        public  void  RegisterSubscriber(ISubScribe f_subScribe)
        {
            subList.Add(f_subScribe);
        }
 
        public  void  RemoveSubScriber(ISubScribe f_subScribe)
        {
            if  (subList.IndexOf(f_subScribe) >= 0)
            {
                subList.Remove(f_subScribe);
            }
        }
 
        //发报纸啦~~
        public  void  SendPaper()
        {
            foreach  (ISubScribe _sub in  subList)
            {
                _sub.HasNewPaper();
            }
        }     
    }
 
    public  class  subHuman : ISubScribe
    {
        //订阅者的名字
        private  string  p_name;
 
        public  subHuman( string  f_name)
        {
            p_name = f_name;
        }
        //告诉订阅者有新报纸了
        public  void  HasNewPaper()
        {
            Console.WriteLine(p_name + "!! 有新的报纸了,请查收!" );
        }
        
    }

开始订订阅,和调用了

?
static  void  Main( string [] args)
         {
             PeopleNewsPaper _paper = new  PeopleNewsPaper();
             subHuman _XiaoMing = new  subHuman( "小明" );
             subHuman _ZhaoYun = new  subHuman( "赵云" );
             subHuman _LiuBei = new  subHuman( "刘备" );
             //小明订报
             _paper.RegisterSubscriber(_XiaoMing);
             //赵云订报
             _paper.RegisterSubscriber(_ZhaoYun);
             //刘备订报
             _paper.RegisterSubscriber(_LiuBei);
             //有新报纸了
             _paper.SendPaper();
             Console.WriteLine( "---------------发完报纸了------------------" );
 
             //小明不想订了,取消报纸
             _paper.RemoveSubScriber(_XiaoMing);
             //又有新报纸了  就没有小明的报纸 了
             _paper.SendPaper();
             Console.ReadLine();
         }

  

<script type="text/javascript"> </script><script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值