当前位置: 首页 > news >正文

委托的注册及注销+观察者模式

事件

委托变量如果公开出去,很不安全,外部可以随意调用

所以取消public,封闭它,我们可以自己书写两个方法,供外部注册与注销,委托调用在子方法里调用,这样封装委托变量可以使它更安全,这个就叫做事件

1.外部不能随便调用,只能注册和注销

2.只能自己去调用自己的委托

委托练习题:

老师会在下课时打铃(事件)

学生们想在打铃事件发生的时候做自己的事情:

小明想在打铃的时候去买东西吃,

小张想在打铃时去打水,

小红想在打铃时开始练习,

小花想在打铃时去打羽毛球。   

代码如下:

using System;namespace 事件
{public delegate void CallDelegate();class Teacher{public string name;CallDelegate callDel;public void RegisterCallEvent(CallDelegate del){callDel += del;}public void LogoutCallEvent(CallDelegate del){callDel -= del;}public Teacher(string name){this.name = name;}public void Call(){Console.WriteLine("{0}打铃了!",name);if (callDel != null){callDel();}}}class Student{public string name;public string action;public Student(string name, string action){this.name = name;this.action = action;}public void DoThing(){Console.WriteLine(name + action);}}class Program{static void Main(string[] args){Teacher teacher = new Teacher("王老师");Student xiaoming = new Student("小明", "买东西吃");Student xiaozhang = new Student("小张", "打水");Student xiaohong = new Student("小红", "练习");Student xiaohua = new Student("小花", "打羽毛球");//teacher.callDel = xiaoming.DoThing;//teacher.callDel += xiaozhang.DoThing;//teacher.callDel += xiaohong.DoThing;//teacher.callDel += xiaohua.DoThing;//teacher.Call();teacher.RegisterCallEvent(xiaoming.DoThing);teacher.RegisterCallEvent(xiaozhang.DoThing);teacher.RegisterCallEvent(xiaohong.DoThing);teacher.RegisterCallEvent(xiaohua.DoThing);teacher.Call();}}}

观察者模式 

模型——视图

发布——订阅

源——收听者

一系列对象来监听另外一个对象的行为,被监听者一旦触发事件/发布消息,则被所有监听者收到,然后执行自己的行为。

就是使用委托/事件,让一系列对象把他们的行为来注册到我的委托中去。

该系列专栏为网课课程笔记,仅用于学习参考。 

相关文章:

委托的注册及注销+观察者模式

事件 委托变量如果公开出去,很不安全,外部可以随意调用 所以取消public,封闭它,我们可以自己书写两个方法,供外部注册与注销,委托调用在子方法里调用,这样封装委托变量可以使它更安全,这个就叫…...

Jetpack02-LiveData 数据驱动UI更新(类似EventBus)

前提 LiveData使用了Lifecycle的生命周期,阅读本文前,请先了解Lifecycle源码。 简介 LiveData本质是数据类型,当改变数据的时候,会通知观察者,且只在界面可见的时候才会通知观察者。只能在主线程注册观察者&#xf…...

Redis 的 Java 客户端有哪些?官方推荐哪个?

Redis 官网展示的 Java 客户端如下图所示,其中官方推荐的是标星的3个:Jedis、Redisson 和 lettuce。 Redis 的 Java 客户端中,Jedis、Lettuce 和 Redisson 是最常用的三种。以下是它们的详细比较: Jedis: 线程安全&…...

工作笔记20240927——vscode + jlink调试

launch.json的配置,可以用的 {"name": "Debug","type": "cppdbg","request": "launch","miDebuggerPath": "./arm-gnu-toolchain-12.2.rel1-x86_64-arm-none-eabi/bin/arm-none-eabi-g…...

Python | Leetcode Python题解之第433题最小基因变化

题目: 题解: class Solution:def minMutation(self, start: str, end: str, bank: List[str]) -> int:if start end:return 0def diffOne(s: str, t: str) -> bool:return sum(x ! y for x, y in zip(s, t)) 1m len(bank)adj [[] for _ in ra…...

opengauss使用遇到的问题,随时更新

一、查看数据库状态的方式 1、gs_ctl -D /opt/huawei/install/data/dn/ status 2、gs_om -t status --detail 3、cm_ctl query -Cv二、opengauss打印WDR性能报告 1、开启WDR性能参数开关 gs_guc reload -N all -D /opt/huawei/install/data/dn -c "enable_wdr_snap…...

从环境部署到开发实战:消息队列 RocketMQ

文章目录 一、消息队列简介1.1 什么是消息队列1.2 常见消息队列对比1.3 RockectMQ 核心概念1.4 RockectMQ 工作机制 (★) 二、RocketMQ 部署相关2.1 服务器单机部署2.2 管控台页面 三、RocketMQ 的基本使用3.1 入门案例3.2 消息发送方式3.2.1 同步消息3.…...

【机器学习(九)】分类和回归任务-多层感知机(Multilayer Perceptron,MLP)算法-Sentosa_DSML社区版

文章目录 一、算法概念二、算法原理(一)感知机(二)多层感知机1、隐藏层2、激活函数sigma函数tanh函数ReLU函数 3、反向传播算法 三、算法优缺点(一)优点(二)缺点 四、MLP分类任务实现…...

渗透测试-文件上传绕过思路

文件上传绕过思路 引言 分享一些文件上传绕过的思路,下文内容多包含实战图片,所以打码会非常严重,可多看文字表达;本文仅用于交流学习, 由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失&#x…...

等保测评中的密码学应用分析

等保测评中密码学应用的分析 等保测评(信息安全等级保护测评)是中国信息安全领域的一项重要活动,旨在评估信息系统的安全性,并根据评估结果给予相应的安全等级。在等保测评中,密码学应用分析是评估信息系统安全性的关键…...

LCR 007. 三数之和

文章目录 1.题目2.思路3.代码 1.题目 LCR 007. 三数之和 给定一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a ,b ,c *,*使得 a b c 0 ?请找出所有和为 0 且 不重复 的三元组。 示例 1&#xff1a…...

【入门01】arcgis api 4.x 创建地图、添加图层、添加指北针、比例尺、图例、卷帘、图层控制、家控件(附完整源码)

1.效果 2.代码 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title></title><link rel"s…...

STL迭代器标签

STL&#xff08;标准模板库&#xff09;迭代器标签是用来标识迭代器类型的分类机制。这些标签有助于确定迭代器的特性&#xff0c;比如它是否可以进行随机访问、是否支持修改元素等。主要的迭代器标签包括&#xff1a; Input Iterator&#xff1a;只读迭代器&#xff0c;可以顺…...

容器学习之SparseArray源码解析

1、SparseArray是android sdk 提供集合类&#xff0c;主要用来替换key 为int类型&#xff0c;value为Object类型的Hashmap 2、SparseArray和HashMap相比优缺点&#xff1a; 优点&#xff1a; 1、SparseArray存在一个int[]keys, 因此避免自动装箱 2、SparseArray扩容时只需要数…...

信创改造技术介绍

目录 服务发现和注册 Sentinel 核心功能 典型应用场景 gateway 网关的主要功能 Spring Cloud Gateway Kong Kong 的主要功能 Kong 的架构&#xff1a; Kong 的使用场景&#xff1a; Kong 的部署模式&#xff1a; 优势 Gateway与Sentinel区别 Gateway Sentinel …...

【可见的点——欧拉函数】

在数论&#xff0c;对正整数n&#xff0c;欧拉函数是小于或等于n的正整数中与n互质的数的数目&#xff08;不包括1&#xff09; 题目 思路 有三个点比较特殊&#xff08;因为一来这三个点一定可见&#xff0c;同时也无法用gcd 1判断&#xff09;&#xff1a;&#xff08;0&am…...

Maven重点学习笔记(包入门 2万字)

Maven依赖管理项目构建工具 尚硅谷 5h 2023最新版 一&#xff0c;Maven简介 1.为什么学习Maven 1.1, Maven是一个依赖管理工具 1️⃣ jar包的规模 随着我们使用越来越多的框架&#xff0c;或者框架封装程度越来越高&#xff0c;项目中使用的jar包也越来越多。项目中&…...

1.分页查询(后端)—— Vue3 + SpringCloud 5 + MyBatisPlus + MySQL 项目系列(基于 Zulu 11)

本手册是基于 Vue3 SpringCloud5 MyBatisPlus MySQL 的项目结构和代码实现&#xff0c;旨在作为一个教学案例进行讲解。为了使案例更具普适性&#xff0c;文档中的公司名称、实体类、表名以及字段名称等敏感信息均已脱敏。 项目结构概述 项目采用标准的分层架构&#xff0…...

机器学习与深度学习的区别:深入理解与应用场景

在人工智能&#xff08;AI&#xff09;的广阔领域中&#xff0c;机器学习和深度学习是两个核心概念&#xff0c;它们虽然紧密相关&#xff0c;但在定义、技术、数据处理能力、应用场景等方面存在显著差异。本文将深入探讨这些区别&#xff0c;帮助读者更好地理解并选择合适的技…...

C++学习笔记(45)

322、循环队列、信号量、生产/消费者模型的源代码 一、demo1.cpp // demo1.cpp&#xff0c;本程序演示循环队列的使用。 #include "_public.h" int main() { using ElemTypeint; squeue<ElemType,5> QQ; ElemType ee; // 创建一个数据元素。 cout << &qu…...

【Linux】shell脚本忽略错误继续执行

在 shell 脚本中&#xff0c;可以使用 set -e 命令来设置脚本在遇到错误时退出执行。如果你希望脚本忽略错误并继续执行&#xff0c;可以在脚本开头添加 set e 命令来取消该设置。 举例1 #!/bin/bash# 取消 set -e 的设置 set e# 执行命令&#xff0c;并忽略错误 rm somefile…...

Linux链表操作全解析

Linux C语言链表深度解析与实战技巧 一、链表基础概念与内核链表优势1.1 为什么使用链表&#xff1f;1.2 Linux 内核链表与用户态链表的区别 二、内核链表结构与宏解析常用宏/函数 三、内核链表的优点四、用户态链表示例五、双向循环链表在内核中的实现优势5.1 插入效率5.2 安全…...

应用升级/灾备测试时使用guarantee 闪回点迅速回退

1.场景 应用要升级,当升级失败时,数据库回退到升级前. 要测试系统,测试完成后,数据库要回退到测试前。 相对于RMAN恢复需要很长时间&#xff0c; 数据库闪回只需要几分钟。 2.技术实现 数据库设置 2个db_recovery参数 创建guarantee闪回点&#xff0c;不需要开启数据库闪回。…...

Leetcode 3577. Count the Number of Computer Unlocking Permutations

Leetcode 3577. Count the Number of Computer Unlocking Permutations 1. 解题思路2. 代码实现 题目链接&#xff1a;3577. Count the Number of Computer Unlocking Permutations 1. 解题思路 这一题其实就是一个脑筋急转弯&#xff0c;要想要能够将所有的电脑解锁&#x…...

spring:实例工厂方法获取bean

spring处理使用静态工厂方法获取bean实例&#xff0c;也可以通过实例工厂方法获取bean实例。 实例工厂方法步骤如下&#xff1a; 定义实例工厂类&#xff08;Java代码&#xff09;&#xff0c;定义实例工厂&#xff08;xml&#xff09;&#xff0c;定义调用实例工厂&#xff…...

网络编程(UDP编程)

思维导图 UDP基础编程&#xff08;单播&#xff09; 1.流程图 服务器&#xff1a;短信的接收方 创建套接字 (socket)-----------------------------------------》有手机指定网络信息-----------------------------------------------》有号码绑定套接字 (bind)--------------…...

佰力博科技与您探讨热释电测量的几种方法

热释电的测量主要涉及热释电系数的测定&#xff0c;这是表征热释电材料性能的重要参数。热释电系数的测量方法主要包括静态法、动态法和积分电荷法。其中&#xff0c;积分电荷法最为常用&#xff0c;其原理是通过测量在电容器上积累的热释电电荷&#xff0c;从而确定热释电系数…...

Spring是如何解决Bean的循环依赖:三级缓存机制

1、什么是 Bean 的循环依赖 在 Spring框架中,Bean 的循环依赖是指多个 Bean 之间‌互相持有对方引用‌,形成闭环依赖关系的现象。 多个 Bean 的依赖关系构成环形链路,例如: 双向依赖:Bean A 依赖 Bean B,同时 Bean B 也依赖 Bean A(A↔B)。链条循环: Bean A → Bean…...

短视频矩阵系统文案创作功能开发实践,定制化开发

在短视频行业迅猛发展的当下&#xff0c;企业和个人创作者为了扩大影响力、提升传播效果&#xff0c;纷纷采用短视频矩阵运营策略&#xff0c;同时管理多个平台、多个账号的内容发布。然而&#xff0c;频繁的文案创作需求让运营者疲于应对&#xff0c;如何高效产出高质量文案成…...

智能AI电话机器人系统的识别能力现状与发展水平

一、引言 随着人工智能技术的飞速发展&#xff0c;AI电话机器人系统已经从简单的自动应答工具演变为具备复杂交互能力的智能助手。这类系统结合了语音识别、自然语言处理、情感计算和机器学习等多项前沿技术&#xff0c;在客户服务、营销推广、信息查询等领域发挥着越来越重要…...