当前位置:编程学习 > C#/ASP.NET >>

抽象通知者Subject类

     当观察者发生变化,通过Notify接口通知所有观察者。避免直接的实现,降低耦合。
[csharp]  
<span style="font-size:12px;">abstract class Subject  
    {  
        private IList<Observer> observers = new List<Observer >();  
  
        //增加观察者  
        public void Attach(Observer observer)  
        {  
            observers.Add(observer );  
        }  
        //移除观察者  
        public void Detach(Observer observer)  
        {  
            observers.Remove(observer );  
        }  
  
        //通知  
        public void Notify()  
        {  
            foreach (Observer o in observers)  
            {  
                o.Update();  
            }  
        }  
    }</span>  
 
 抽象观察者Observers类
当得到主题通知时,调用Update。称为更新接口
[csharp] 
<span style="font-size:10px;">abstract class  Observer  
    {  
        public abstract void Update();  
    }  
    abstract class Subject</span>  
 
具体观察者concreteObserver类
     实现抽象观察者的update接口,更新当前状态。
[csharp] 
class ConcreteObserver : Observer  
    {  
        private string name;  
        private string observerState;  
        private ConcreteSubject subject;  
  
        public ConcreteObserver(ConcreteSubject subject, string name)  
        {  
            this.subject = subject;  
            this.name = name;  
        }  
  
        public override void Update()  
        {                                                                                                                                                                                                                                 observerState=subject.SubjectState;  
            Console.WriteLine ("观察者{0}的状态是{1}",name,observerState );  
        }  
    }  
 
 
      客户端
 
[csharp]  
static void Main(string[] args)  
        {  
            ConcreteSubject a = new ConcreteSubject();  
  
            a.Attach(new ConcreteObserver (a,"b"));  
  
            a.SubjectState = "状态a";  
            a.Notify();  
  
            Console.Read();  
        }  
 
补充:软件开发 , C# ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,