C# 设计模式之观察者模式

原创 2007年10月11日 23:07:00

        观察者模式的目的就是在对象之间定义一个一对多的依赖关系,从而当一个对象状态方式改变时,所有依赖这个对象的对象都能得到通知,并对上述改变做出反应!

        比如对于一个对象,客户对其感兴趣的部分发生改变,这个对象应该通知客户。同时,对象中的哪些信息是客户感兴趣的呢?这个由客户来定义!

using System;
using System.Collections.Generic;
using System.Text;

namespace OberverPattern
...{
    
//---------------------------第一种方式---------------------------------------------
    
//(1)自定义的委托
    public delegate void ChangeHandler();

    
//(2)Net Framework已经定义的事件类型的委托
   
//在.Net Framework中关于委托类型EventHandler的声明就如下:
   
//[C#]
   
//[Serializable]
   
//public delegate void EventHandler(
   
//    object sender,
   
//   EventArgs e
   
//);

    
/**//// <summary>
    
/// 被多个类共同依赖的类
    
/// </summary>

    public class Dependence
    
...{
        
//(3)声明一个委托类型
        public ChangeHandler Change;

        
public void Dispatch()
        
...{
            
if (Change != null)
            
...{
                Change();
            }

        }

    }


    
/**//// <summary>
    
/// 类一
    
/// </summary>

    public class CommonFst
    
...{
        
public CommonFst(Dependence d)
        
...{
            d.Change 
+= new ChangeHandler(React);
        }


        
public void React()
        
...{
            Console.WriteLine(
"Frist Cls!");
        }

    }


    
/**//// <summary>
    
/// 类二
    
/// </summary>

    public class CommonScd
    
...{
        
public CommonScd(Dependence d)
        
...{
            d.Change 
+= new ChangeHandler(React);
        }


        
public void React()
        
...{
            Console.WriteLine(
"Second Cls!");
        }

    }

    
//---------------------------结束---------------------------------------------

    
//---------------------------第二种方式---------------------------------------------
    public interface IReact
    
...
        
void React();
    }


    
public abstract class OtherDependence
    
...{
        
private IList<IReact> Reacts = new List<IReact>();

        
public OtherDependence()
        
...{
        }


        
public void Dispatch()
        
...{
            
foreach (IReact react in Reacts)
            
...{
                react.React();
            }

        }


        
public void Add(IReact react)
        
...{
            Reacts.Add(react);
        }


        
public void Remove(IReact react)
        
...{
            Reacts.Remove(react);
        }

    }


    
public class Implement : OtherDependence
    
...

    }


    
public class CommonOtherFst : IReact
    
...{
        
public void React()
        
...{
            Console.WriteLine(
"Frist Cls!");
        }

    }


    
public class CommonOtherScd : IReact
    
...{
        
public void React()
        
...{
            Console.WriteLine(
"Second Cls!");
        }

    }



    
//---------------------------结束---------------------------------------------

    
class Program
    
...{        
        
static void Main(string[] args)
        
...{
            
//---------------------------第一种方式---------------------------------------------
            Dependence d = new Dependence();
            CommonFst fst 
= new CommonFst(d);
            CommonScd scd 
= new CommonScd(d);
            d.Change();
            Console.ReadLine();

            
//---------------------------第二种方式---------------------------------------------
            Implement implement = new Implement();
            IReact reactFst 
= new CommonOtherFst();
            IReact reactScd 
= new CommonOtherScd();            
            implement.Add(reactFst);
            implement.Add(reactScd);
            implement.Dispatch();
            Console.ReadLine();
        }

    }

}


大话设计模式—观察者模式

当对象间存在一对多关系时,则使用观察者模式(Observer Pattern)。比如,当一个对象被修改时,则会自动通知它的依赖对象。观察者模式属于行为型模式。主要解决一个对象状态改变给其他对象通知的问...
  • lmb55
  • lmb55
  • 2016-03-27 22:57:41
  • 1120

(C#)设计模式 之 观察者模式 (经典应用:猫叫,烧开水)

转自:http://www.cnblogs.com/panbbb/archive/2008/11/10/1330695.html /* * 题目: * 猫叫了,所有老鼠开始逃跑,主人被惊醒,请用OO...
  • chenglin1986
  • chenglin1986
  • 2012-09-03 18:31:40
  • 1818

C#设计模式---观察者模式简单例子

在开发过程中经常遇到一个模块中的 一个方法调用了其他模块中相关的方法 比如说在一个系统中,如果出现了错误,就调用专门进行错误处理的模块中的方法进行错误处理 而因为错误处理的操作有很多,所以将这些具...
  • qq1010885678
  • qq1010885678
  • 2014-07-27 11:44:38
  • 2151

【C#设计模式-观察者模式】

一.基本简介:观察者设计模式定义了对象间的一种一对多的依赖关系,以便一个对象的状态发生变化时,所有依赖于它的对象都得到通知并自动刷新。在现实生活中的可见观察者模式,例如,微信中的订阅号,订阅博客和QQ...
  • heyangyi_19940703
  • heyangyi_19940703
  • 2016-05-09 14:08:38
  • 982

Unity3d之设计模式(三)观察者模式

观察者模式 当对象间存在一对多关系时,则使用观察者模式(Observer Pattern)。比如,当一个对象被修改时,则会自动通知它的依赖对象。观察者模式属于行为型模式。 介绍 意图:定义对象间的一种...
  • qq563129582
  • qq563129582
  • 2016-12-15 14:28:54
  • 1122

【大话设计模式】——观察者模式

现实生活中存在很多观察者模式的实例,对于我们的理解和学习存在很大的帮助。最简单的例子,我们每天都使用Windows系统,用户界面和窗体之间,不同的状态发生不同的变化就是很好的观察者模式。       ...
  • jiuqiyuliang
  • jiuqiyuliang
  • 2013-03-17 15:39:07
  • 2407

设计模式(五)观察者模式

观察者模式(又被称为发布-订阅(Publish/Subscribe)模式,它定义了一种一对多的依赖关系,让多个观察者对象同时监听莫一个主题对象。这个主题对象在状态变化时,会通知所有的观察者对象,使他们...
  • itachi85
  • itachi85
  • 2016-03-02 17:41:50
  • 43480

Java设计模式-回调函数和观察者模式

Android的框架中有非常多的地方使用了回调的模式,例如Activity的生命周期,按钮的点击事件等。 下面是回调的基本模型: public class A { private CallBack...
  • cauchyweierstrass
  • cauchyweierstrass
  • 2015-03-24 16:20:44
  • 9365

最常用的设计模式---观察者模式(C++实现)

最常用的设计模式---装饰者模式(C++实现)
  • lh844386434
  • lh844386434
  • 2014-01-08 17:55:01
  • 3219

Android设计模式(十一)-观察者模式

观察者模式是一种使用频率非常高的设计模式,最常用的地方就是订阅-发布系统。这个模式的重要作用就是将观察者和被观察者解耦,使他们之间的依赖更小甚至没有。定义定义对象一种一对多的依赖关系,使得每当一个对象...
  • qq_25806863
  • qq_25806863
  • 2017-04-05 00:26:48
  • 1400
收藏助手
不良信息举报
您举报文章:C# 设计模式之观察者模式
举报原因:
原因补充:

(最多只允许输入30个字)