博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Observer(订阅与发布)
阅读量:5067 次
发布时间:2019-06-12

本文共 1748 字,大约阅读时间需要 5 分钟。

观察者模式:

观察者模式很好理解,类似于邮件订阅和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

你可能感兴趣的文章
安全模式 冷启动
查看>>
simulated annealing/爬山/Metropolis/优化算法
查看>>
基于Lucene3.5.0怎样从TokenStream获得Token
查看>>
一网打尽各类Java基本数据类型转换
查看>>
FlowLayout布局
查看>>
深入理解JVM读书笔记--字节码执行引擎
查看>>
vue-搜索功能-实时监听搜索框的输入,N毫秒请求一次数据
查看>>
批处理 windows 服务的安装与卸载
查看>>
React文档翻译 (快速入门)
查看>>
sql注入【手工及一些工具】
查看>>
所有的jsp页面都放到WEB-INF目录
查看>>
Android开发环境搭建全程演示(jdk+eclipse+android sdk)
查看>>
如何修改SVN中的用户名和密码
查看>>
(转) 苹果所有常用证书,appID,Provisioning Profiles配置说明及制作图文教程(精)...
查看>>
TJOI2011书架(dp)
查看>>
C++ p63作业 1
查看>>
第七课 Zookeeper配置管理,分布式锁案例,运维管理,运维管理系统
查看>>
数的划分(动态规划)
查看>>
.Net EntityFramework学习笔记
查看>>
挣值管理(EVT)
查看>>