1.题目

某在线股票软件需要提供如下功能:当股票购买者购买的某只股票价格变化幅度达到5%时,系统将自动发送通知(包括新价格)给购买该股票的股民。现使用观察者模式设计该系统,绘制类图并编成实现。

2.题解

2.1UML类图

​ 首先是UML类图,如下图所示:在这里插入图片描述

2.2实现代码(C#)

​ 代码如下:

 abstract class Observer
    {
        public abstract void Update();
    }
    abstract class Subject
    {
        protected IList<Observer> holders = new List<Observer>();
        //增加观察者
        public void Attach(ConcreteObsever holder)
        {
            holders.Add(holder);
        }
        //移除观察者
        public void Remove(ConcreteObsever holder)
        {
            holders.Remove(holder);
        }
        //通知
        public abstract void Notify();
    }
    class ConcreteSubject : Subject
    {
        private int Percent;
        //具体涨幅
        public int rangePercent
        {
            get { return Percent; }
            set { Percent = value; }
        }
        public override void Notify()
        {
            if (rangePercent >= 5)
            {
                foreach (ConcreteObsever h in holders)
                    h.Update();
            }
            else
            {
                Console.WriteLine("当前涨幅为{0}%", Percent);
                Console.WriteLine("股票变化正常...");
                Console.WriteLine("****************");
            }
        }

    }
    class ConcreteObsever : Observer
    {
        private string name;
        private ConcreteSubject system;
        public ConcreteObsever(string name, ConcreteSubject sys)
        {
            this.name = name;
            this.system = sys;
        }
        public override void Update()
        {
            Console.WriteLine("正在发送通知股民成员:" + name + "。内容为:股票价格变化幅度达到5%..");
            Console.WriteLine("***" + name + "已收到通知");
        }
        public ConcreteSubject System
        {
            get { return system; }
            set { system = value; }
        }
    }
    class Program
    {
        static void Main(string[] args)
        {
            ConcreteSubject sys = new ConcreteSubject();
            ConcreteObsever wmr = new ConcreteObsever("XXX", sys);
            ConcreteObsever my = new ConcreteObsever("马云", sys);
            sys.Attach(wmr);
            sys.Attach(my);
            sys.rangePercent = 1;
            sys.Notify();
            sys.rangePercent = 3;
            sys.Notify();
            sys.rangePercent = 5;
            sys.Notify();
            Console.Read();
        }
    }

2.3运行结果

​运行结果如下:在这里插入图片描述

3.资源链接

链接:https://pan.baidu.com/s/1Wum8o8qzvlxg2WOY6ayYZw
提取码:kppr

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐