设计模式之观察者模式

来源:互联网 发布:绑定域名和空间 编辑:程序博客网 时间:2024/06/06 13:01


代码执行:

static void Main(string[] args)        {            ConcreteSubject1 sub1 = new ConcreteSubject1();            //  两者进行联系            ConcreteObserver1 ob1 = new ConcreteObserver1(sub1);            sub1.RegisterObserver(ob1);            //              sub1.SubState = "不睦沙卡拉卡";            Console.Read();        }

1、主题类接口

 //  相当于天气的变化    //  主题类接口    public abstract class Subject    {        List<Observer> list = new List<Observer>();        //  注册观察者        public void RegisterObserver(Observer ob)        {            list.Add(ob);        }        //  移除观察者        public void RemoveObserver(Observer ob)        {            list.Remove(ob);        }        //  当主题类发生改变时通知观察者        public void NoticeObserver()        {            foreach (Observer ob in list)            {                ob.Update();            }        }    }


2、观察者接口

//  相当于天气预报的显示板    //  观察者类接口    public abstract class Observer    {        //  显示主题类改变了什么        public abstract void Update();    }


3、具体的主题类

//  具体的主题类    public class ConcreteSubject1 : Subject    {        //  主题类的一个信息        private string subState;        public string SubState        {            get { return subState; }            set            {                subState = value;                //  当主题类信息发生改变时通知观察者                NoticeObserver();            }        }    }


4、具体的观察者类

//  具体的观察者类    public class ConcreteObserver1 : Observer    {        //  具体的那个主题类要视情况而定        public ConcreteSubject1 sub;        //  不要在内部 new 观察者,要在Main函数里面 new ,那样还可以注册观察者        //  否则的话,在里面 new 的观察者是没有被注册的        public ConcreteObserver1(ConcreteSubject1 sub)        {            this.sub = sub;        }        public override void Update()        {            //  显示板显示新的内容            Console.WriteLine("Oberver1更新显示:    " + sub.SubState);        }    }




原创粉丝点击