观察者模式

来源:互联网 发布:淘宝下单微信全额返现 编辑:程序博客网 时间:2024/05/22 11:52

观察者模式的应用

网上商店中如果商品(product)在名称(name)、价格(price)等方面有变化,系统能自动通知会员,将是网上商店区别传统商店的一大特色。如何设计实现? 说明你所选择的设计模式,画出类关系图并指明各个类的角色。应用外观模式,用C#控制台应用程序改进该设计。绘制该模式的UML图。



using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace shiyan9guanchazhemoshi{    abstract class Observer    {        protected Subject sub;        public Observer( Subject sub)        {            this.sub = sub;        }        public abstract void Update();    }    class PriceObserver : Observer    {        public PriceObserver(Subject sub) : base( sub){ }                public override void Update()        {            Console.WriteLine("{0}:价格变化",sub.SubjectState);        }    }    class NameObserver : Observer    {        public NameObserver(Subject sub) : base(sub) { }        public override void Update()        {            Console.WriteLine("{0}:名称变化", sub.SubjectState);        }    }    interface Subject    {        void Attach(Observer observer);        void Detach(Observer observer);        void Notify();        string SubjectState        {            get;            set;        }    }    class Secretary : Subject    {        private IList<Observer> observers = new List<Observer>();        private string action;        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();        }        public string SubjectState        {            get { return action; }            set { action = value; }        }    }    class Program    {        static void Main(string[] args)        {            Secretary sc = new Secretary();            PriceObserver po = new PriceObserver(sc);            NameObserver no = new NameObserver(sc);            sc.Attach(po);            sc.Attach(no);            sc.SubjectState = "有变化---5/19";            sc.Notify();            sc.Detach(no);            sc.SubjectState = "有变化---5/20";            sc.Notify();            Console.Read();        }    }}


原创粉丝点击