博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
用C#改写Head First Design Patterns--Observer观察者(原创)
阅读量:4135 次
发布时间:2019-05-25

本文共 2397 字,大约阅读时间需要 7 分钟。

观察者,被观察实时数据推送给观察者

 

 

using System;

using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Observer

{
    interface Subject
    {
         void register(Observer o);
         void remove(Observer o);
         void notify();
    }

    interface Observer

    {
         void update(float temp);
    }

    interface Dispaly

    {
         void display();
    }
}

 

 

using System;

using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Observer
{

    /// <summary>

    /// 可被观察的数据,里面有观察者列表
    /// </summary>
    class DataClass : Subject
    {
        //观察者列表
        private List<Observer> observers;

        //被实时观察的温度

        private float temp;

        public DataClass()

        {
            observers = new List<Observer>();
        }

      

        //添加观察者
        public void register(Observer o)
        {
            observers.Add(o);
        }

        //删除观察者

        public void remove(Observer o)
        {
            //或者:
            //
            //int i = observers.IndexOf(o);
            //if (i > 0)
            //{
            //    observers.RemoveAt(i);
            //}

            observers.Remove(o);

        }

        //提醒观察者进行数据更新

        public void notify()
        {
            for (int i = 0; i < observers.Count; i++)
            {
                Observer o = (Observer)observers[i];
                o.update(temp);
            }
        }

        /// <summary>

        /// 改变数值,并提醒观察者进行数据更新
        /// </summary>
        public void setValue(float temp)
        {
            this.temp = temp;
            notify();

        }

    }
}

 

 

using System;

using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Observer

{
    /// <summary>
    /// 观察者之一
    /// </summary>
    class FirstDisplay : Observer,Dispaly
    {
        private float temp;

        //被观察的数据作为成员变量

        private Subject subjectData;

        public FirstDisplay(Subject s)

        {
            this.subjectData = s;

            //最重要的一句,为可被观察数据注册观察者

            subjectData.register(this);
        }

        public void update(float temp)

        {
            this.temp = temp;
            display();
        }

        /// <summary>

        /// 观察者之一的显示方式
        /// </summary>
        public void display()
        {
            System.Console.Out.WriteLine("当前数值:" + temp);
        }

    }
}

 

 

using System;

using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Observer

{
    class OtherDisplay:Observer,Dispaly
    {
        private float temp;
        private Subject subjectData;

        public OtherDisplay(Subject s)

        {
            this.subjectData = s;
            subjectData.register(this);
        }

        public void update(float temp)

        {
            this.temp = temp;
            display();
        }

        public void display()

        {
            System.Console.Out.WriteLine("当前数值指数:" + temp*2);
        }

    }
}

 

 

using System;

using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Observer

{
    class Program
    {
        static void Main(string[] args)
        {
            DataClass data = new DataClass();
            FirstDisplay f = new FirstDisplay(data);
            OtherDisplay o = new OtherDisplay(data);

            data.setValue(80);

            data.setValue(99);

            System.Console.ReadLine();

        }
    }
}

 

 

转载地址:http://kvpvi.baihongyu.com/

你可能感兴趣的文章
zju 1005 zoj 1005
查看>>
zju 1006 zoj 1006
查看>>
【虚拟机】虚拟化架构与系统部署(Windows系统安装)
查看>>
字节跳动安卓开发实习生面试分享
查看>>
好书分享之——《能力陷进》
查看>>
阅读笔记《c++ primer》
查看>>
阅读笔记《C++标准程序库》
查看>>
基于mirror driver的windows屏幕录像
查看>>
C语言8
查看>>
Qt实现简单延时
查看>>
qml有关矩形说明
查看>>
在qt中使用QSplitter设置初始比例setStretchFactor失效的解决方法
查看>>
repeater的使用
查看>>
qt msvc编译中文乱码解决
查看>>
qt中TextField输入框无法输入中文解决办法
查看>>
qt实现点击出现窗口,点击其他任何地方窗口消失
查看>>
QML DropArea拖拉文件事件
查看>>
CORBA links
查看>>
读后感:&gt;
查看>>
ideas about sharing software
查看>>