pursuedream
成功=水平+业务+沟通+判断
观察者模式

通过外部的变化,使自己能够很快得到反馈信息,好比股票投资者对股票的变动。

观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态上发生变化时,会通知所有观察者对象,使它们能够自动更新自己。

    //观察者
    public abstract class Observer
    {
        public abstract void Update();
    }

    public 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("Observer {0}'s new state is {1}",
             name, ObserverState);
        }
    }

    public abstract class Subject
    {
        private ArrayList observers = new ArrayList();
        //添加
        public void Attach(Observer ob)
        {
            observers.Add(ob);
        }
        //移除
        public void Remove(Observer ob)
        {
            observers.Remove(ob);
        }
        //修改
        public void Notify()
        {
            foreach (Observer ob in observers)
            {
                ob.Update();
            }
        }
    }

    public class ConcreteSubject : Subject
    {
        private string subjectState;

        public string SubjectState
        {
            get
            { return subjectState; }
            set { subjectState = value; }
        }

    }

实现
            ConcreteSubject subject = new ConcreteSubject();
            //ConcreteSubject对观察考对象的引用保存在一个聚集,“blue”就是变化的内容
            subject.Attach(new ConcreteObserver(subject, "blue"));
            subject.Attach(new ConcreteObserver(subject, "red"));
            subject.Attach( new ConcreteObserver(subject, "black"));

            subject.SubjectState = "green"; //当外部发生变化时候,要尽快反映变化
 
            subject.Notify();


posted on 2007-06-25 15:22  pursuedream  阅读(171)  评论(0)    收藏  举报