dotSITE
Work in Murano Software. Вопросы/Ответы Учебник по ASP.NET
новости материалы решения форумы группы настройки/о проекте

Observer

Observer - паттерн, позволяющий создавать объекты, зависимые от данного и которые получают извещения при каждой смене состояния первичного объекта.

        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);
                }   
            }

            public class Client
            {     
                public static int Main(string[] args)
                {          
                    ConcreteSubject s = new ConcreteSubject();
                    ConcreteObserver o1 = new ConcreteObserver("first observer");
                    ConcreteObserver o2 = new ConcreteObserver("second observer");

                    s.Attach(o1);
                    s.Attach(o2);

                    s. ImportantSubjectData = "This is important subject data";

                    s.Notify();         
                    return 0;
                }
            }
        }
        

Back
Контакт Реклама на сайте Спонсорам Веб мастерам

Лицензионное соглашение - © 2000-2012 dotSITE
Хостинг .NET предоставлен PARKING.RU
Поддержку сайта осуществляет Murano Software Inc., Offshore software development