美文网首页
观察者模式

观察者模式

作者: 周末的游戏之旅 | 来源:发表于2019-08-29 17:44 被阅读0次

观察者模式

观察者模式适用于有多个对象,对象之间存在一对多的依赖关系。
被依赖的对象称为subject,依赖的对象成为Observer,subject通知Observer变化

举例

观察者模式就像顶牛奶业务

  1. 奶站,Subject
  2. 用户,Observer

Subject:登记注册、移除通知


Observer:接收输入


示例

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

namespace Observer
{
    /// <summary>
    /// 观察者接口
    /// </summary>
    interface Observer
    {
        void Update(float mTeperatrue,float mPressure,float mHumidity);
    }

    interface Subject
    {
        void RegisterObserver(Observer observer);
        void RemoveObserver(Observer observer);
        void NotifyObservers();
    }

    class CurrentConditions : Observer
    {
        private float mTeperatrue;
        private float mPressure;
        private float mHumidity;

        //更新本地数据
        public void Update(float mTeperatrue, float mPressure, float mHumidity)
        {
            this.mTeperatrue = mTeperatrue;
            this.mPressure = mPressure;
            this.mHumidity = mHumidity;
            Display();
        }

        //显示本地数据
        public void Display()
        {
            Console.WriteLine("Tody mTeperatrue"+ mTeperatrue);
            Console.WriteLine("Tody mPressure" + mPressure);
            Console.WriteLine("Tody mHumidity" + mHumidity);
        }
    }

    class ForcastConditions : Observer
    {
        private float mTeperatrue;
        private float mPressure;
        private float mHumidity;

        public void Update(float mTeperatrue, float mPressure, float mHumidity)
        {
            this.mTeperatrue = mTeperatrue;
            this.mPressure = mPressure;
            this.mHumidity = mHumidity;
            Display();
        }

        public void Display()
        {
            Random rd = new Random();
            Console.WriteLine("Tomorrow mTeperatrue" + mTeperatrue + rd.Next(1, 10));
            Console.WriteLine("Tomorrow mPressure" + mPressure + rd.Next(1, 10));
            Console.WriteLine("Tomorrow mHumidity" + mHumidity + rd.Next(1, 10));
        }
    }

    class WeatherData:Subject
    {
        private float mTeperatrue;
        private float mPressure;
        private float mHumidity;
        private List<Observer> myObservers;

        public float MTeperatrue { get => mTeperatrue; }
        public float MPressure { get => mPressure; }
        public float MHumidity { get => mHumidity; }

        public WeatherData()
        {
            myObservers = new List<Observer>();
        }

        public void SetData(float mTeperatrue, float mPressure,float mHumidity)
        {
            this.mTeperatrue = mTeperatrue;
            this.mPressure = mPressure;
            this.mHumidity = mHumidity;
            DataChange();
        }

        public void DataChange()
        {
            NotifyObservers();
        }

        public void NotifyObservers()
        {
            for (int i = 0; i < myObservers.Count; i++)
            {
                myObservers[i].Update(MTeperatrue, MPressure, MHumidity);
            }
        }

        public void RegisterObserver(Observer observer)
        {
            myObservers.Add(observer);
        }

        public void RemoveObserver(Observer observer)
        {
            if (myObservers.Contains(observer))
                myObservers.Remove(observer);
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            CurrentConditions currentConditions = new CurrentConditions();
            ForcastConditions forcastConditions = new ForcastConditions();
            WeatherData weatherData=new WeatherData();

            weatherData.RegisterObserver(currentConditions);
            weatherData.RegisterObserver(forcastConditions);
            weatherData.SetData(1, 2, 3);
        }
    }
}

相关文章

  • 11.9设计模式-观察者模式-详解

    设计模式-观察者模式 观察者模式详解 观察者模式在android中的实际运用 1.观察者模式详解 2.观察者模式在...

  • RxJava基础—观察者模式

    设计模式-观察者模式 观察者模式:观察者模式(有时又被称为发布(publish )-订阅(Subscribe)模式...

  • 前端面试考点之手写系列

    1、观察者模式 观察者模式(基于发布订阅模式) 有观察者,也有被观察者。 观察者需要放到被观察者列表中,被观察者的...

  • RxJava 原理篇

    一、框架思想 观察者模式观察者自下而上注入被观察者被观察者自上而下发射事件观察者模式 装饰器模式自上而下,被观察者...

  • 观察者模式

    观察者模式概念 观察者模式是对象的行为模式,又叫作发布-订阅(publish/subscrible)模式。 观察者...

  • 设计模式-观察者模式

    观察者模式介绍 观察者模式定义 观察者模式(又被称为发布-订阅(Publish/Subscribe)模式,属于行为...

  • 观察者模式

    观察者模式 观察者模式的定义 观察者模式(Observer Pattern)也叫做发布订阅模式(Publish/s...

  • iOS设计模式之观察者模式

    观察者模式 1、什么是观察者模式 观察者模式有时又被称为发布(publish)-订阅(Subscribe)模式、模...

  • 观察者模式和发布订阅模式区别

    观察者模式 所谓观察者模式,其实就是为了实现松耦合(loosely coupled)。 在观察者模式中,观察者需要...

  • RxJava(二)

    一、观察者模式 1.1、传统的观察者模式 1.2、RxJava 的观察者模式 区别传统的观察者模式是一个 Obse...

网友评论

      本文标题:观察者模式

      本文链接:https://www.haomeiwen.com/subject/tqhwectx.html