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

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

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

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

    }

}


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值