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();
        }

    }

}


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

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

设计模式在游戏开发中的应用之观察者模式

观察者模式 1.通俗的定义         触发事件的一方不关心谁来处理,处理事件的一方不关心事件是从哪里来的。观察者模式就是让观察者与被观察者彻底解耦。 2.2.结构图如下(图片来源与网络): ...
  • yue19870813
  • yue19870813
  • 2016年11月12日 16:44
  • 642

观察者模式(observer行为型)c#简单例子

观察者模式(observer行为型)c#简单例子 几个要点:模式使目标与观察都之间的依赖关系达到松耦合、通知会自动传播 例子:玩家击中敌人后发生一系列变化:发后爆炸、敌人少1个.... namesp...
  • zhgl7688
  • zhgl7688
  • 2014年12月17日 00:24
  • 1087

C# ~ 从 委托事件 到 观察者模式

委托和事件的部分基础知识可参见 C#/.NET 基础学习 之 [委托-事件] 部分 ;参考 [1]. 从无到有 谈委托、事件和观察者模式; [2]. 初识事件 到 自定义事件; [3]. 从类型...
  • qing101
  • qing101
  • 2016年08月15日 19:00
  • 1639

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

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

设计模式在游戏中的应用--观察者模式(十)

观察者模式看似很陌生,其实可以说观察者模式是游戏中使用最多的一种模式,甚至比单例模式还要使用频繁,而且想要写好游戏的代码必须了解游戏中的那些地方使用了观察者模式,每个观察者的订阅者是谁。大多数MMOR...
  • guxuxin
  • guxuxin
  • 2015年08月29日 23:39
  • 948

[设计模式as3版]二.观察者模式

发布者package { public interface Subject { function addObserver(observer:Observer):void; funct...
  • liushen829475
  • liushen829475
  • 2013年06月21日 18:00
  • 593

设计模式C++实现——观察者模式

观察者模式定义了对象之间的一对多依赖,这样一来,当一个对象改变状态时,它的所有依赖者都会收到通知并自动更新。        观察者模式结构图如下:                举例:      ...
  • walkerkalr
  • walkerkalr
  • 2014年06月04日 19:51
  • 1166

设计模式-深入解析观察者模式(Observer)

在上篇设计模式上我们继续前进把,苦逼(酷毙)的程序员一刻都不能松懈的,要紧跟脚步,每天都学习啊!!学了策略模式,我自己去用设计模式写了几个例子,感觉还扣以啊。下面继续总结一下观察者模式的学习,如有不正...
  • qq_29282475
  • qq_29282475
  • 2015年12月07日 16:16
  • 1242

Java设计模式(观察者模式JDK自带)

JDK自带的观察者模式和我们上一节说的基本相似,也有通用的观察协议规则 Observer,这个接口中只有一个方法,就是update方法 public interface Observer { ...
  • xyjwsj
  • xyjwsj
  • 2017年02月15日 16:47
  • 664
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C# 设计模式之观察者模式
举报原因:
原因补充:

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