设计模式--观察者模式
http://zh.wikipedia.org/wiki/%E8%A7%82%E5%AF%9F%E8%80%85%E6%A8%A1%E5%BC%8F
观察者模式: 我个人觉得, 观察者模式被分为2个部分(观察者&被观察者).
所有观察者都属于同一类型(针对接口编程,继承统一接口).
我觉得这个有点类似.Net framework中的事件实现. 其中TestClassA就是其中一个观察者.
代码
#region 监视者模式
public class ProductInfo
{
public string strProductName { get; set; }
public string strProductPrice { get; set; }
}
public interface IObserv
{
void Update();
}
public interface IDisplayElement
{
void display(ProductInfo obj);
}
public class TestClassADisplay : IDisplayElement
{
#region IDisplayElement Members
public void display(ProductInfo obj)
{
Console.WriteLine(obj.strProductName + " " + obj.strProductPrice + "");
}
#endregion
}
public class TestClassA : IObserv
{
IDisplayElement _display;
private ProductInfo _productInfo;
public TestClassA(ProductInfo obj)
{
this._productInfo = obj;
}
public void SetDisplay(IDisplayElement obj)
{
this._display = obj;
}
#region IObserv Members
public void Update()
{
this._display.display(this._productInfo);
}
#endregion
}
public interface IObservOper
{
void RegisterObser(IObserv obj);
void RemoveObser(IObserv obj);
void Update();
}
public class ObserOperate : IObservOper {
ArrayList list;
public ObserOperate()
{
list = new ArrayList();
}
#region IObservOper Members
public void RegisterObser(IObserv obj)
{
list.Add(obj);
}
public void RemoveObser(IObserv obj)
{
if (list.IndexOf(obj)>-1)
{
list.Remove(obj);
}
}
public void Update()
{
foreach (IObserv obj in list)
{
obj.Update();
}
}
#endregion
}
#endregion
public class ProductInfo
{
public string strProductName { get; set; }
public string strProductPrice { get; set; }
}
public interface IObserv
{
void Update();
}
public interface IDisplayElement
{
void display(ProductInfo obj);
}
public class TestClassADisplay : IDisplayElement
{
#region IDisplayElement Members
public void display(ProductInfo obj)
{
Console.WriteLine(obj.strProductName + " " + obj.strProductPrice + "");
}
#endregion
}
public class TestClassA : IObserv
{
IDisplayElement _display;
private ProductInfo _productInfo;
public TestClassA(ProductInfo obj)
{
this._productInfo = obj;
}
public void SetDisplay(IDisplayElement obj)
{
this._display = obj;
}
#region IObserv Members
public void Update()
{
this._display.display(this._productInfo);
}
#endregion
}
public interface IObservOper
{
void RegisterObser(IObserv obj);
void RemoveObser(IObserv obj);
void Update();
}
public class ObserOperate : IObservOper {
ArrayList list;
public ObserOperate()
{
list = new ArrayList();
}
#region IObservOper Members
public void RegisterObser(IObserv obj)
{
list.Add(obj);
}
public void RemoveObser(IObserv obj)
{
if (list.IndexOf(obj)>-1)
{
list.Remove(obj);
}
}
public void Update()
{
foreach (IObserv obj in list)
{
obj.Update();
}
}
#endregion
}
#endregion