Observer(订阅与发布)
观察者模式:
观察者模式很好理解,类似于邮件订阅和RSS订阅,当我们浏览一些博客或wiki时,经常会看到RSS图标,就这的意思是,当你订阅了该文章,如果后续有更新,会及时通知你。其实,简单来讲就一句话:当一个对象变化时,其它依赖该对象的对象都会收到通知,并且随着变化!对象之间是一种一对多的关系。
观察者模式:一对多的关系,当被观察这发生改变时会通知所有观察者。让双方都依赖于抽象,使得各自变化不会影响另一方。
//发布者脚本
public class PublicObserver : MonoBehaviour {
private InputField _Title;
private InputField _Content;
private Button _publishButton;
public event System.Action<string, string> e;
private void Awake()
{
_Title = transform.Find("Title").GetComponent<InputField>();
_Content = transform.Find("Content").GetComponent<InputField>();
_publishButton= transform.Find("publishButton").GetComponent<Button>();
}
private void Start()
{
_publishButton.onClick.AddListener(EventClick);//注册事件
}
void EventClick()
{
if (e!=null)
{
e(_Title.text, _Content.text);
}
}
}
//订阅者脚本
public class TakeObserver : MonoBehaviour {
private Text Title;
private Text Content;
private Button _takeButton;
private Button _conentButton;
private PublicObserver actionEvent;
private void Awake()
{
Title = transform.Find("Title").GetComponent<Text>();
Content = transform.Find("Content").GetComponent<Text>();
_takeButton = transform.Find("Take").GetComponent<Button>();
_conentButton = transform.Find("Cancel").GetComponent<Button>();
if (actionEvent==null)//事件为空的找到甲苯添加事件
{
actionEvent = GameObject.Find("Publish").GetComponent<PublicObserver>();
}
}
private void Start()
{
_takeButton.onClick.AddListener(TakeEvent);
_conentButton.onClick.AddListener(ContentEvent);
}
private void TakeEvent(string title,string content)//委托调用的方法
{
Title.text = title;
Content.text = content;
}
private void TakeEvent()//订阅
{
actionEvent.e += TakeEvent;//添加事件
}
private void ContentEvent()//取消
{
actionEvent.e -= TakeEvent;
}
}
转载于:https://www.cnblogs.com/YangMengMeng/p/9126377.html
Observer(订阅与发布)相关推荐
- ROS与Arduino学习(三)订阅与发布
ROS与Arduino学习(三)订阅与发布 Tutorial Level:HelloWorld Next Tutorial:用ROS的Cmake编译程序 本节介绍如何在arduino中发布与订阅消息. ...
- Redis源码剖析(五)订阅与发布
Redis提供了订阅和发布的功能,允许客户端订阅一个或多个频道,当其他客户端向某个频道发送消息时,服务器会将消息转发给所有订阅该频道的客户端 这一点有点像群聊的功能,一个客户端将消息发往群中(向某个频 ...
- 【Vue2.0】— 消息订阅与发布pubsub(二十)
[Vue2.0]- 消息订阅与发布pubsub(二十)
- ros先订阅后发布 无法收到消息的解决办法
现象 今天遇到的问题是: 使用的是Ros1, 在先订阅后发布时, 会导致订阅者无法收到订阅的消息, 除非在发布者发布后重新订阅. 思考 以前使用的是Ros2似乎并不关心订阅和发布的先后顺序, 似乎都 ...
- Redis 订阅与发布
PUBLISH channel msg将信息 message 发送到指定的频道 channelSUBSCRIBE channel [channel ...]订阅频道,可以同时订阅多个频道UNSUBSC ...
- ros2订阅esp32发布的电池电压数据-补充
ros2订阅esp32发布的电池电压数据 电池电压数据能订阅但是不显示,数据QoS不匹配,需要修改. 默认: 需要使用的是外部机器人通过wifi传递的数据,设置: // create publishe ...
- tp5和微信小程序联接mqtt订阅及发布
前文已经在啊里云宝塔中搭建好mqtt服务器,这里就在tp5及小程序中实现订阅及发布 一.tp5实现 1.先上网下载phpMQTT.php文件 https://github.com/bluerhinos ...
- Redis订阅与发布原理
记录下来以后方便回忆,需要时随时翻阅 Redis 订阅与发布 原理 client->pubsub_channels 是客户端维护的一个以dict结构的维护的订阅频道哈希表,VAL是NULL,不需 ...
- redis操作订阅和发布
redis中订阅和发布,可以理解为java设计模式中的生产者和消费者模式,一个生产数据,一个消费数据,消费数据的呢,开启一个阻塞线程,等待生产数据,接下来我们看看redis怎样操作,我们需要开启两个终 ...
- 小程序中消息订阅与发布
注:小程序中最好不要在开发工具里面使用命令行安装,最好使用外部的 1)首先要在项目中初始化一个package.json用来存放包 npm init 2)下载安装要使用的包,这里是要使用消息订阅与发布 ...
最新文章
- lucene索引合并与增量索引
- python 类和对象 atm_Python 类和对象
- 水泵怎么做_泳池设备日常怎么维护和保养?
- android踩坑日记1
- keytool使用方法总结
- 7.边缘检测:2D运算——Canny边缘原理、Canny边缘检测器、Canny-Matlab实战_2
- 在C#中用RX库和await来实现直观的状态机
- 动态模型之增压暂停【FunTester测试框架】
- 基于FPGA的脉冲压缩设计(Matlab+vivado)
- 1055 集体照 (25分)
- VxWorks下的调试
- 数据库性能调优架构师所需的skillset
- Qt 隐式共享之深拷贝、浅拷贝
- 夯实Java基础(一)
- 人工智能过去60年沉浮史,未来60年将彻底改变人类
- Redhat6.5配置RHCS--ISCSI/SCSI实现磁盘文件共享
- Swift函数式编程十二(表格应用)
- 唐娜姐:Win10一周年更新RTM版倒计时,团队力保万无一失
- 供应施耐德MT框架开关MT10 MT12 MT16 MT20 MT25 MT32 MT40 MT63
- 字符串匹配——Sunday算法
热门文章
- step1 . day6 C语言基础练习之数组和字符串
- 微信小程序手机预览不正常,打开手机调试后预览正常
- 【Java中级】(三)IO
- Spring Data JPA 条件查询的关键字
- Spring+ehcache缓存实例
- ADO.NET Entity Framework Extensions 简单应用
- go语言学习笔记(2)命令源码文件
- react 项目实战(三)表单验证
- jconsole命令(Java Monitoring and Management Console)
- codewars??? Is my friend cheating?