Patterns in SOME –Observer

    技术2022-05-11  69

    Code in C#:   namespace Observer_DesignPattern {      using System;      using System.Collections;        class Subject      {          private ArrayList list = new ArrayList();            private string strImportantSubjectData = "Initial";                   public string ImportantSubjectData          {               get               {                    return strImportantSubjectData;               }               set               {                    strImportantSubjectData = value;               }          }            public void Attach(Observer o)          {               list.Add(o);               o.ObservedSubject = this;          }            public void Detach(Observer o)          {                        }            public void Notify()          {               foreach (Observer o in list)                       {                    o.Update();               }                      }      }        class ConcreteSubject : Subject      {          public void GetState()          {                        }            public void SetState()          {                        }         }        abstract class Observer      {          protected Subject s;          public Subject ObservedSubject          {               get               {                    return s;                   }               set               {                    s = value;               }          }             abstract public void Update();      }        class ConcreteObserver : Observer      {          private string observerName;                   public ConcreteObserver(string name)          {               observerName = name;          }            override public void Update()          {               Console.WriteLine("In Observer {0}: data from subject = {1}",                    observerName, s.ImportantSubjectData);          }         }        ///<summary>      ///    Summary description for Client.      ///</summary>      public class Client      {              public static int Main(string[] args)          {                        // Set up everything               ConcreteSubject s = new ConcreteSubject();               ConcreteObserver o1 = new ConcreteObserver("first observer");               ConcreteObserver o2 = new ConcreteObserver("second observer");                 s.Attach(o1);               s.Attach(o2);                 // make changes to subject               s. ImportantSubjectData = "This is important subject data";                 // Notify all observers               s.Notify();                          return 0;          }      } }   Code in SOME:    CSubject        AObserver[] _list        string ImportantSubjectData        Attach(AObserver)        Detach(AObserver)        Notify()   CConcreteSubject : CSubject        GetState()        SetState()   AObserver        CSubject S        a_Update()   CConcreteObserver : AObserver        (string _observerName)        o_Update()   CClient        main     CClient.main {        CConcreteSubject s.();        CConcreteObserver o1.("first observer");                          //constant identifier can only be string or number        CConcreteObserver o2.("second observer");               s.Attach(o1)        {               _list.Add(o1);               o1.ObservedSubject = s;                     //"o1.ObservedSubject = this"        };               s.Attach(o2);               <% s.ImportantSubjectData = "This is important subject data"; %>               s.Notify()        {               <%                                                                                                                        //if you don't wanna unfold any invoking, just snip all               foreach (Observer o in list)               {                      o.Update();               }               %>        }; }  

    最新回复(0)