设计模式:观察者模式

简介:

 设计模式系列目录

今天介绍另一种模式

观察者模式是我们经常用的一个模式,比如在用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();
         }

  

 

 c++代码

  View Code
  View Code
  View Code

调用

  View Code

 

本文转自lpxxn博客园博客,原文链接:http://www.cnblogs.com/li-peng/archive/2013/02/04/2892116.html,如需转载请自行联系原作者

相关文章
|
3月前
|
设计模式 监控 安全
设计模式 | 观察者模式
设计模式 | 观察者模式
18 0
|
3月前
|
设计模式 前端开发 数据中心
设计模式之观察者模式
设计模式之观察者模式
|
4月前
|
设计模式 存储 Java
认真学习设计模式之观察者模式(Observer Pattern)
认真学习设计模式之观察者模式(Observer Pattern)
29 0
|
2月前
|
设计模式 前端开发 JavaScript
观察者模式 vs 发布-订阅模式:两种设计模式的对决!
欢迎来到前端入门之旅!这个专栏是为那些对Web开发感兴趣、刚刚开始学习前端的读者们打造的。无论你是初学者还是有一些基础的开发者,我们都会在这里为你提供一个系统而又亲切的学习平台。我们以问答形式更新,为大家呈现精选的前端知识点和最佳实践。通过深入浅出的解释概念,并提供实际案例和练习,让你逐步建立起一个扎实的基础。无论是HTML、CSS、JavaScript还是最新的前端框架和工具,我们都将为你提供丰富的内容和实用技巧,帮助你更好地理解并运用前端开发中的各种技术。
|
6月前
|
设计模式 供应链
行为型设计模式03-观察者模式
行为型设计模式03-观察者模式
35 0
|
17天前
|
设计模式 监控 Java
设计模式 - 观察者模式(Observer):Java中的战术与策略
【4月更文挑战第7天】观察者模式是构建可维护、可扩展系统的关键,它在Java中通过`Observable`和`Observer`实现对象间一对多的依赖关系,常用于事件处理、数据绑定和同步。该模式支持事件驱动架构、数据同步和实时系统,但需注意避免循环依赖、控制通知粒度,并关注性能和内存泄漏问题。通过明确角色、使用抽象和管理观察者注册,可最大化其效果。
|
1月前
|
设计模式 存储 Java
【设计模式】观察者模式
【设计模式】观察者模式
|
4月前
|
设计模式 存储 Java
Java设计模式【二十】:观察者模式
Java设计模式【二十】:观察者模式
26 0
|
3月前
|
设计模式 Java Spring
设计模式之观察者模式
设计模式之观察者模式
26 0
|
3月前
|
设计模式 算法 自动驾驶
常见的设计模式(模板与方法,观察者模式,策略模式)
随着时间的推移,软件代码越来越庞大,随着而来的就是如何维护日趋庞大的软件系统。在面向对象开发出现之前,使用的是面向过程开发来设计大型的软件程序,面向过程开发将软件分成一个个单独的模块,模块之间使用函数进行组合,最后完成系统的开发,每次需要修改软件,如果不涉及好各个模块的关系,就会导致软件系统难以维护,从而导致软件变得不可使用。面向对象方法用对象模拟问题域中的实体,以对象间的联系刻画实体间联系
63 2