观察者模式的目的就是在对象之间定义一个一对多的依赖关系,从而当一个对象状态方式改变时,所有依赖这个对象的对象都能得到通知,并对上述改变做出反应!
比如对于一个对象,客户对其感兴趣的部分发生改变,这个对象应该通知客户。同时,对象中的哪些信息是客户感兴趣的呢?这个由客户来定义!
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();
}
}
}
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();
}
}
}