设计模式--观察者模式

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 { getset; }
        
public string strProductPrice { getset; }
    }
    
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

 

 

posted on 2009-12-31 16:50  博览潇湘  阅读(206)  评论(0编辑  收藏  举报

导航