观察者模式:

观察者模式很好理解,类似于邮件订阅和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(订阅与发布)相关推荐

  1. ROS与Arduino学习(三)订阅与发布

    ROS与Arduino学习(三)订阅与发布 Tutorial Level:HelloWorld Next Tutorial:用ROS的Cmake编译程序 本节介绍如何在arduino中发布与订阅消息. ...

  2. Redis源码剖析(五)订阅与发布

    Redis提供了订阅和发布的功能,允许客户端订阅一个或多个频道,当其他客户端向某个频道发送消息时,服务器会将消息转发给所有订阅该频道的客户端 这一点有点像群聊的功能,一个客户端将消息发往群中(向某个频 ...

  3. 【Vue2.0】— 消息订阅与发布pubsub(二十)

    [Vue2.0]- 消息订阅与发布pubsub(二十)

  4. ros先订阅后发布 无法收到消息的解决办法

    现象 今天遇到的问题是: 使用的是Ros1, 在先订阅后发布时, 会导致订阅者无法收到订阅的消息, 除非在发布者发布后重新订阅. 思考 以前使用的是Ros2似乎并不关心订阅和发布的先后顺序,  似乎都 ...

  5. Redis 订阅与发布

    PUBLISH channel msg将信息 message 发送到指定的频道 channelSUBSCRIBE channel [channel ...]订阅频道,可以同时订阅多个频道UNSUBSC ...

  6. ros2订阅esp32发布的电池电压数据-补充

    ros2订阅esp32发布的电池电压数据 电池电压数据能订阅但是不显示,数据QoS不匹配,需要修改. 默认: 需要使用的是外部机器人通过wifi传递的数据,设置: // create publishe ...

  7. tp5和微信小程序联接mqtt订阅及发布

    前文已经在啊里云宝塔中搭建好mqtt服务器,这里就在tp5及小程序中实现订阅及发布 一.tp5实现 1.先上网下载phpMQTT.php文件 https://github.com/bluerhinos ...

  8. Redis订阅与发布原理

    记录下来以后方便回忆,需要时随时翻阅 Redis 订阅与发布 原理 client->pubsub_channels 是客户端维护的一个以dict结构的维护的订阅频道哈希表,VAL是NULL,不需 ...

  9. redis操作订阅和发布

    redis中订阅和发布,可以理解为java设计模式中的生产者和消费者模式,一个生产数据,一个消费数据,消费数据的呢,开启一个阻塞线程,等待生产数据,接下来我们看看redis怎样操作,我们需要开启两个终 ...

  10. 小程序中消息订阅与发布

    注:小程序中最好不要在开发工具里面使用命令行安装,最好使用外部的 1)首先要在项目中初始化一个package.json用来存放包 npm init 2)下载安装要使用的包,这里是要使用消息订阅与发布 ...

最新文章

  1. lucene索引合并与增量索引
  2. python 类和对象 atm_Python 类和对象
  3. 水泵怎么做_泳池设备日常怎么维护和保养?
  4. android踩坑日记1
  5. keytool使用方法总结
  6. 7.边缘检测:2D运算——Canny边缘原理、Canny边缘检测器、Canny-Matlab实战_2
  7. 在C#中用RX库和await来实现直观的状态机
  8. 动态模型之增压暂停【FunTester测试框架】
  9. 基于FPGA的脉冲压缩设计(Matlab+vivado)
  10. 1055 集体照 (25分)
  11. VxWorks下的调试
  12. 数据库性能调优架构师所需的skillset
  13. Qt 隐式共享之深拷贝、浅拷贝
  14. 夯实Java基础(一)
  15. 人工智能过去60年沉浮史,未来60年将彻底改变人类
  16. Redhat6.5配置RHCS--ISCSI/SCSI实现磁盘文件共享
  17. Swift函数式编程十二(表格应用)
  18. 唐娜姐:Win10一周年更新RTM版倒计时,团队力保万无一失
  19. 供应施耐德MT框架开关MT10 MT12 MT16 MT20 MT25 MT32 MT40 MT63
  20. 字符串匹配——Sunday算法

热门文章

  1. step1 . day6 C语言基础练习之数组和字符串
  2. 微信小程序手机预览不正常,打开手机调试后预览正常
  3. 【Java中级】(三)IO
  4. Spring Data JPA 条件查询的关键字
  5. Spring+ehcache缓存实例
  6. ADO.NET Entity Framework Extensions 简单应用
  7. go语言学习笔记(2)命令源码文件
  8. react 项目实战(三)表单验证
  9. jconsole命令(Java Monitoring and Management Console)
  10. codewars??? Is my friend cheating?