前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >设计模式- 观察者模式(Observer Pattern)

设计模式- 观察者模式(Observer Pattern)

作者头像
易兒善
发布于 2019-05-14 06:22:06
发布于 2019-05-14 06:22:06
39500
代码可运行
举报
文章被收录于专栏:挖坑填坑挖坑填坑
运行总次数:0
代码可运行

定义

观察者模式(Observer Pattern): 定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新

C#例子

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    public interface ISubject {
        void AddObserver(Observer observer);
        void DeleteObserver(Observer observer);
    }
    public class Subject: ISubject
    {
        private IList<Observer> _observers = new List<Observer>();
        private int _qantity;
        public int Qantity
        {
            get
            {
                return _qantity;
            }
            set
            {
                _qantity = value;
                this.NotifyAllObservers();
            }
        }
        public void AddObserver(Observer observer) {
            _observers.Add(observer);
        }

        public void DeleteObserver(Observer observer)
        {
            _observers.Remove(observer);
        }

        private void NotifyAllObservers() {
            foreach (var observer in _observers) {
                observer.Update();
            }
        }
    }

    public abstract class Observer
    {
        protected Subject _subject;
        public abstract void Update();
    }

    public class ObserverA : Observer
    {
        public override void Update()
        {
            Console.WriteLine("我是A,我知道你的数量改变了!");
        }
    }
    public class ObserverB : Observer
    {
        public ObserverB(Subject subject)
        {
            _subject = subject;
        }
        public override void Update()
        {
            Console.WriteLine("我是B,我知道你的数量改变成了"+_subject.Qantity);
        }
    }

        static void Main(string[] args)
        {
            Subject subject = new Subject();
            subject.AddObserver(new ObserverA());
            subject.AddObserver(new ObserverB(subject));
            subject.Qantity = 10;
            Console.ReadLine();
        }

观察者模式参与者:

  • ISubject: 抽象的主题,被观察的对象,提供Attach和Detach Observer对象的接口
  • Subject: 具体的被观察对象,维持Subject状态。 当状态发生变化时,发送消息通知它的观察者。
  • Observer:抽象的观察者,定义一个发送变化通知更新的接口。
  • Observer*: 维持一个对Subject对象的引用, 保存subjects状态,实现当Observer接口发生变动时,subjects状态同步更新。

观察者模式适用情形:

  • 当一个抽象模型有两个方面,其中一方面依赖于另一方面。将这二者封装在独立的对象中以使它们可以各自独立地改变和复用。
  • 当对一个对象的改变需要同时改变其他对象,而不需要知道具体有多少对象有待改变。
  • 当一个对象必须通知其他对象,而它又不需要知道其它的通知对象是谁,那些其它对象是谁不影响它发送通知这件事。

观察者模式特点:

  • 使用面向对象的抽象,Observer模式使得可以独立地改变目标与观察者,从而使二者之间的依赖关系达到松耦合。
  • 目标发送通知时,无需指定观察者,通知会自动传播。观察者自己决定是否需要订阅通知。
  • 在C#中的Event。委托充当了Observer接口,而提供事件的对象充当了目标对象,委托是比抽象Observer接口更为松耦合的设计。

其他

源码地址

dotnet-design-patterns

其他设计模式

23种设计模式

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019.05.03 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
观察者模式(Observer)
观察者模式是一种行为型模式,允许你定义一种订阅机制,可在对象事件发生时通知多个 “观察” 该对象的其他对象。 它定义了对象之间的一对多依赖,这样一来,当一个对象改变状态时,它的所有依赖者都会收到通知并自动更新。
兜兜转转
2023/03/08
7520
观察者模式(Observer)
设计模式--观察者模式
设计模式中的观察者模式是一种行为型模式,用于在对象之间建立一对多的依赖关系,使得当一个对象状态发生改变时,所有依赖它的对象都会自动得到通知并做出相应的更新。观察者模式中包含两种主要角色:被观察者(Subject)和观察者(Observer)。被观察者具有添加、删除和通知观察者的功能,而观察者则实现更新方法,在接收到被观察者的通知后进行更新操作。
软件架构师Michael
2023/07/25
2410
Java观察者模式(Observer)
  观察者模式java GOF23种设计模式中的一种。在最近介绍的Redis和ActiveMQ中都涉及到了观察者模式,所以我们在本文详细介绍下此模式:
用户4919348
2019/04/02
8060
Java观察者模式(Observer)
观察者模式:对象间的一种一对多的依赖关系
观察者模式[ 又称发布(publish)-订阅(Subscribe)模式 ],它定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。其实就是一种通知机制,让发送通知的一方(被观察方)和接收通知的一方(观察者)能彼此分离,互不影响。UML类图如下:
BUG弄潮儿
2020/12/17
1.2K0
观察者模式:对象间的一种一对多的依赖关系
C#设计模式15——观察者模式的写法
观察者模式是一种设计模式,它定义了对象之间的一种一对多的依赖关系,使得当一个对象状态发生改变时,它的所有依赖者都能够得到相应的通知并作出相应的反应。观察者模式也被称为发布-订阅模式。
明志德道
2023/10/21
3090
观察者模式
《Head First Design Pattern》一书中对观察者模式的定义如下: The Observer Pattern defines a one-to-many dependency objects so that when one object changes state, all of its dependents are notified and updated automatically.
卡尔曼和玻尔兹曼谁曼
2019/01/22
7030
观察者模式
观察者模式
观察者模式 观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听一个主题对象,当主题对象在状态上发生改变时,通知所有的观察者对象,并让他们自动更新自己; 观察者模式的组成 抽象主题角色: 将所有的观察者引用存放到一个集合中,每个主题可以拥有任意数量的观察者;主题提供一个接口,用来增加,移除通知观察者。一般用一个抽象类或接口来实现; 抽象观察者角色: 为所有的观察者定义一个接口,在得到主题通知时更新自己; 具体主题角色: 在具体主题状态发生改变时,通知所有登记过的观察者。具体主题通常由一个子类实现
佛系编码
2018/05/22
4350
TypeScript 设计模式之观察者模式
在软件系统中经常碰到这类需求:当一个对象的状态发生改变,某些与它相关的对象也要随之做出相应的变化。这是建立一种对象与对象之间的依赖关系,一个对象发生改变时将自动通知其他对象,其他对象将相应做出反应。
pingan8787
2020/08/17
1.2K0
设计模式——观察者模式
设计模式——观察者模式
Java架构师必看
2021/05/14
2350
设计模式——观察者模式
TypeScript 设计模式之观察者模式
观察者模式,它定义了一种一对多的关系,让多个观察者对象同时监听某一个主题对象,这个主题对象的状态发生变化时就会通知所有的观察者对象,使得它们能够自动更新自己。
阿宝哥
2020/02/12
6320
【一起学系列】之观察者模式:我没有在监控你啊
定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新
Kerwin
2020/07/30
4740
【一起学系列】之观察者模式:我没有在监控你啊
⭐️C#零基础到入门 ⭐️| 编程 设计模式界的”网红”——观察者模式
观察者模式是对象的行为模式,又叫发布-订阅(Publish/Subscribe)模式、模型-视图(Model/View)模式、源-监听器(Source/Listener)模式或从属者(Dependents)模式。
呆呆敲代码的小Y
2021/08/20
5440
⭐️C#零基础到入门 ⭐️| 编程 设计模式界的”网红”——观察者模式
设计模式学习(二): 观察者模式 (C#)
《深入浅出设计模式》学习笔记第二章 需求: 开发一套气象监测应用,如图: 气象站,目前有三种装置,温度、湿度和气压感应装置。 WeatherData对象追踪气象站的数据,并更新到布告板,布告板(目前是
solenovex
2018/03/01
7390
设计模式学习(二): 观察者模式 (C#)
【地铁上的设计模式】--行为型模式:观察者模式
观察者模式(Observer Pattern)是一种设计模式,它定义了对象之间一对多的依赖关系,当一个对象状态发生改变时,其所有依赖者都会收到通知并自动更新。观察者模式中,被观察者对象通常被称为主题(Subject),而观察者对象通常被称为观察者(Observer)。 在观察者模式中,主题维护一个观察者列表,当主题的状态发生变化时,它会依次通知所有的观察者,使它们能够及时更新自己的状态。这种松耦合的设计模式使得主题和观察者之间的关系不会影响彼此的稳定性,使得系统更加灵活和易于扩展。
喵叔
2023/05/12
2880
设计模式之观察者模式
Define a one-to-many dependency between objects where a state change in one object results with all its dependents being notified and updated automatically.
beginor
2020/08/10
2910
设计模式之观察者模式
设计模式-观察者模式
观察者模式(Observer),又叫发布-订阅模式(Publish/Subscribe),定义对象间一种一对多的依赖关系,使得每当一个对象改变状态,则所有依赖于它的对象都会得到通知并自动更新。UML结构图如下:
架构狂人
2023/10/13
1690
设计模式-观察者模式
观察者模式
观察者模式(Observer Pattern)是一种行为型设计模式,用于定义对象间的一对多依赖关系,使得当一个对象的状态发生变化时,所有依赖于它的对象都会自动收到通知并更新。这种模式主要用于实现发布-订阅机制。
码事漫谈
2024/12/20
1280
观察者模式
观察者模式
  有时被称作发布/订阅模式,观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态发生变化时,会通知所有观察者对象,使它们能够自动更新自己。
小小工匠
2021/08/16
7470
【C++】设计模式:观察者、策略、模板
观察者模式的基本原理,通过观察者模式可以实现对象之间的松耦合,当一个对象的状态发生变化时,所有依赖于它的对象都会得到通知并作出相应的响应。
DevFrank
2024/07/24
850
一起学设计模式 - 观察者模式
观察者模式是一种使用率极高的模式,用于建立一种对象与对象之间的依赖关系,一个对象发生改变时将自动通知其他对象,其他对象将相应作出反应。在观察者模式中,发生改变的对象称为观察目标,而被通知的对象称为观察者,一个观察目标可以对应多个观察者,而且这些观察者之间可以没有任何相互联系,可以根据需要增加和删除观察者,使得系统更易于扩展。
battcn
2018/08/03
3420
一起学设计模式 - 观察者模式
相关推荐
观察者模式(Observer)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验