设计模式_观察者模式

观察者模式

介绍

设计模式定义案例问题堆积在哪里解决办法
观察者是行为型设计模式
多个对象 观察 1个对象
小强考试完 成绩公布了
家长/同学得知成绩后
做出不同反应
一个一个通知很麻烦
先通知谁 也有讲究的

信息发布方
抽象出一个信息管理类
负责管理监听者

类图

代码

ObserverBase


public abstract class ObserverBase
{public abstract void ReceiverMsg();
}

Mom 

using UnityEngine;public class Mom : ObserverBase
{public void MakeDinner(){Debug.Log("mom:做一顿大餐!");}public override void ReceiverMsg(){MakeDinner();}
}

Father 

using UnityEngine;public class Father : ObserverBase
{public void BuyToys(){Debug.Log("father:买玩具!");}public override void ReceiverMsg(){BuyToys();}
}

Schoolmate 

using UnityEngine;public class Schoolmate : ObserverBase
{public void Good(){Debug.Log("同学:给你鼓掌 嗷嗷叫!!");}public override void ReceiverMsg(){Good();}
}

Myself

using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class Myself
{// 观察者列表public List<ObserverBase> observerList = new List<ObserverBase>();// 添加观察者public void Add(ObserverBase observer){observerList.Add(observer);}// 移除观察者public void Remove(ObserverBase observer){observerList.Remove(observer);}public void Clear(){observerList.Clear();}// Show分数public void ShowGrade(){Debug.Log("公开考试成绩:100" );// 通知注册的人foreach (var item in observerList){item.ReceiverMsg();}}}

测试代码

public class TestGCZ : MonoBehaviour
{void Start(){Myself myself = new Myself();myself.Add(new Schoolmate());myself.Add(new Father());myself.Add(new Mom());myself.ShowGrade();}}

结果

总结

这个例子比较简单一个对象发生变化 通知 一群观察者

如果需求更复杂 (一群对象是观察者也是被观察者,相互直接观察然后做出不同的反应)

这样对更有趣! 

如:

一个对象如果希望交流 , 就变为“交流者”,

“交流者”具备 观察者和发布者的功能。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/127378.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何搭建稳定独享的美国IP?优质美国静态住宅代理IP哪里有?

相信很多做跨境电商或外贸如TikTok shop、Facebook商店、Amazon、领英的玩家都需要搭建独享的美国IP环境来运营店铺&#xff0c;那么如何搭建稳定独享的IP环境呢&#xff1f;加下来为你详细介绍&#xff0c;并为你推荐优质的美国静态住宅代理IP&#xff0c;助力您的跨境业务。 …

ubuntu PX4 vscode stlink debug设置

硬件 stlink holybro debug板 pixhawk4 安装openocd 官方文档&#xff0c;但是第一步安装建议从源码安装&#xff0c;bug少很多 github链接 编译安装&#xff0c;参考 ./bootstrap (when building from the git repository)./configure [options]makesudo make install安装后…

Spring Cloud的ElasticSearch的进阶学习

目录 数据聚合 Bucket示例 Metric示例 RestAPI实现聚合 自动补全 使用拼音分词 自定义分词器 实现自动补全 RestAPI实现自动补全功能 数据同步 同步调用 异步通知 监听binlog 数据聚合 聚合可以实现对文档数据的统计、分析、运算。聚合常见的有三类&#xff1a; …

大模型之十九-对话机器人

大语言模型的最早应用是Chatbot&#xff0c;其实我最早接触语义理解在2014年&#xff0c;2014年做智能音箱的时候&#xff0c;那时也是国内第一批做智能音箱的&#xff0c;在现在看起来当时的智能音箱比较傻&#xff0c;很多问题无法回答&#xff0c;长下文效果也不好&#xff…

Linux安装sysv-rc-conf报错:出现NO_PUBKEY...问题,急需安装证书的情况

Linux下安装MySQL时&#xff0c;出现一个使用chkconfig命令&#xff0c;但无该命令的情况&#xff01; chkconfig --add mysql # 出现chkconfig command not found于是就展开了一次替换的行动&#xff0c;将chkconfig替换为sysv-rc-conf 第一步&#xff1a; 尝试直接安装&am…

飞桨国际化应用案例:挪威广告企业Adevinta应用PaddleOCR提质增效

Adevinta&#xff0c;位于挪威奥斯陆的跨国在线分类广告公司&#xff0c;以其全球市场的图像处理API为特色。Adevinta的主要使命是构建全球买家和卖家之间的桥梁&#xff0c;其在线市场运营覆盖11个国家&#xff0c;拥有众多备受信任的品牌&#xff0c;如荷兰的marktplaats、德…

Spring底层原理(五)

Spring底层原理(五) 本章内容 介绍Aware接口与InitializingBean接口、Bean的初始化与销毁、Scope Aware接口 作用:用于注入一些与容器相关的信息 类名作用BeanNameAware注入Bean的名称BeanFactoryAware注入BeanFactory容器ApplicationContextAware注入ApplicationContext容…

Java之SpringCloud Alibaba【七】【Spring Cloud微服务网关Gateway组件】

一、网关简介 大家都都知道在微服务架构中&#xff0c;一个系统会被拆分为很多个微服务。那么作为客户端要如何去调用这么多的微服务呢?如果没有网关的存在&#xff0c;我们只能在客户端记录每个微服务的地址&#xff0c;然后分别去用。 这样的架构&#xff0c;会存在着诸多…

稳恒电路直观理解0

图v0 图v1 图v2 图v3 图v4 自由正电荷s&#xff0c;定向移动过程中&#xff0c;在任何一位置处受力都是平衡的&#xff0c;即s所受总合力为0&#xff0c; 即s处于匀速运动&#xff1a;直导体中匀速直线运动、拐弯处匀速圆周运动 起初t0时刻, s的势能是最高的E0&#xff0c;之…

springboot--多环境配置快速切换开发、测试、生产环境

多环境配置快速切换开发、测试、生产环境 前言1、使用1.1指定环境Profile({"dev","test"})Spring Profiles 提供一个隔离配置的方式&#xff0c;使其仅在特定环境生效 任何Component,Configuration或ConfigurationProperties 可以使用Profile标记&#xff…

【VR开发】【Unity】【VRTK】2-关于VR的基础知识

【概述】 在VRTK的实操讲解之前&#xff0c;本篇先介绍几个重要的VR认识。 【VR对各个行业的颠覆】 如果互联网几乎把所有行业都重做了一遍&#xff0c;VR在接下来的几年很可能再把现有的行业都重做一遍&#xff0c;包括但不限于教育&#xff0c;房地产&#xff0c;零售&…

华为防火墙 配置 SSLVPN

需求&#xff1a; 公司域环境&#xff0c;大陆客户端居家办公室需要连到公司域&#xff0c;这里可以在上海防火墙上面开通SSLVPN&#xff0c;员工就可以透过SSLVPN连通上海公司的内网&#xff0c;但是由于公司域控有2个站点&#xff0c;一个在上海&#xff0c;一个在台北&…

无需编程技术,快速搭建个人网站

如果你想拥有一个属于自己的个人网站&#xff0c;但又没有任何编程经验&#xff0c;别担心&#xff0c;我们今天将为你介绍一个简单的方法&#xff0c;让你轻松搭建网站&#xff0c;无需任何编程知识。让我们一起来看看吧&#xff01; 在乔拓云建站工具中&#xff0c;自带了许多…

FMC子卡解决方案:FMC214-基于FMC兼容1.8V IO的Full Camera Link 输出子卡

FMC214-基于FMC兼容1.8V IO的Full Camera Link 输出子卡 一、板卡概述   基于FMC兼容1.8V IO的Full Camera Link 输出子卡支持Base、Middle、Full Camera link信号输出&#xff0c;兼容1.8V、2.5V、3.3V IO FPGA信号输出。适配xilinx不同型号开发板和公司内部各FMC载板。北…

ArcGIS Pro怎么生成高程点

一般情况下&#xff0c;我们从公开渠道获取到的高程数据都是DEM数据&#xff0c;但是如果要用到CAD等软件内则需要用到高程点&#xff0c;那么如何从DEM提取高程点呢&#xff0c;这里为大家介绍一下生成方法&#xff0c;希望能对你有所帮助。 数据来源 本教程所使用的数据是…

centos7、ky10_server(arm版、x86版)将程序做成系统服务

前提条件 提供启动脚本、停止脚本 启动脚本 生成app启动脚本 touch app_start.sh cat > app_start.sh << EOF chmod -R 777 /home/tuners/ginkgo7000webcd /home/tuners/ginkgo7000web/apache-tomcat/bin./startup.sh EOF停止脚本 生成app停止脚本 touch app_stop.s…

Pycharm安装jupyter和d2l

安装 jupyter: jupyter是d2l的依赖库&#xff0c;没有它就用不了d2l pycharm中端输入pip install jupyter安装若失败则&#xff1a; 若网速过慢&#xff0c;则更改镜像源再下载&#xff1a; pip config set global.index-url https://mirrors.aliyun.com/pypi/simple/ pip …

中国长城-安全防护-硬件,软件,细粒度权限划分-等级保护,人员意识

目录 等级保护 安全防护 中国长城-安全防护 硬件&#xff0c;软件&#xff0c;细粒度权限划分-等级保护&#xff0c;人员意识 等级保护 安全防护 建立安全管理制度&#xff1a;制定信息安全政策&#xff0c;明确安全管理职责&#xff0c;建立安全培训和考核机制&#xff0c…

【斗罗二】戴华斌再次打脸,王冬对战嗜血魔熊,仙琳儿神秘登场

Hello,小伙伴们&#xff0c;我是小郑继续为大家深度解析国漫资讯。 深度爆料&#xff0c;《绝世唐门》22集预告最新爆料&#xff0c;在上一集中&#xff0c;我们见证了戴华斌因输给霍雨浩而耿耿于怀&#xff0c;此次他下定决心动用家族的力量来挑战霍雨浩。然而&#xff0c;他…

【设计模式】第12节:结构型模式之“外观模式”

一、简介 门面模式&#xff0c;也叫外观模式&#xff0c;英文全称是Facade Design Pattern。门面模式为子系统提供一组统一的接口&#xff0c;定义一组高层接口让子系统更易用。 目的&#xff1a;简化复杂系统的交互方式 特点&#xff1a;提供一个统一的交互接口 二、UML类…