【Unity与23种设计模式】观察者模式(Observer)
来源:互联网 发布:大众软件电子版下载 编辑:程序博客网 时间:2024/05/16 19:27
GoF中定义:
“在对象之间定义一个一对多的连接方法,当一个对象变换状态时,其他关联的对象都会自动收到通知。”
现实中,社交网络就是个例子。
以前的报社,每次出新刊的时候,
报刊便会将新刊一本一本的送到订阅报刊人的手中
于是,每次出新刊,报社都得送到每个人的手中
而如今的微博,便是应用了观察者模式
当想关注某个人时,只需要点击关注便可订阅
当关注的人更新微博时,只需要更新到微博平台
订阅的人就可以接收到更新的消息
而不需要被关注的那个人向每个订阅者发送消息
C#中的事件系统(Event)便是使用的观察者模式
Unity中的所有事件(如UI点击事件)也是应用的观察者模式
//事件接口public abstract class Subject { List<Observer> m_Observers = new List<Observer>(); public void Attach(Observer theObserver) { m_Observers.Add(theObserver); } public void Detach(Observer theObserver) { m_Observers.Remove(theObserver); } public void Notify() { foreach (Observer theObserver in m_Observers) theObserver.Update(); }}
//实现事件public class ConcreteSubject : Subject { string m_SubjectState; public void SetState(string state) { m_SubjectState = state; Notify(); } public string GetState() { return m_SubjectState; }}
//观察者接口public abstract class Observer { public abstract void Update();}
//实现观察者public class ConcreteObserver : Observer { string m_SubjectState; ConcreteSubject m_Subject = null; public ConcreteObserver(ConcreteSubject theSubject){ m_Subject = theSubject; } public override void Update() { Debug.Log("ConcreteSubject.Update"); }}
//测试类public class TestObserver { private void UnitTest() { ConcreteSubject theSubject = new ConcreteSubject(); ConcreteObserver theObserver = new ConcreteObserver(theSubject); theSubject.Attach(theObserver); theSubject.SetState("Subject状态1"); }}
观察者模式的设计原理是,先设置一个主题(Subject)
让这个主题发布时可同时通知关心这个主题的观察者/订阅者
并且主题不必理会观察者/订阅者接下来会执行哪些操作
观察者模式的主要功能和优点:
将“主题发生”与“功能执行”这两个操作解除绑定
文章整理自书籍《设计模式与游戏完美开发》 菜升达 著
阅读全文
0 0
- 【Unity与23种设计模式】观察者模式(Observer)
- 23种设计模式之观察者模式(Observer)
- 设计模式--观察者(Observer)
- 设计模式-观察者(Observer)
- 观察者设计模式(Observer)
- Observer(观察者)设计模式
- 观察者设计模式Observer
- 观察者设计模式(observer)
- observer(观察者设计模式)
- Observer(观察者)设计模式
- 23设计模式之观察者模式(Observer)
- 23设计模式之观察者模式(Observer)
- 设计模式之Observer(观察者模式)
- 设计模式之Observer(观察者模式)
- 设计模式 (十五)观察者模式(Observer)
- 设计模式 (十五)观察者模式(Observer)
- 【设计模式】之观察者模式(Observer)
- 设计模式之--观察者模式(Observer)
- 前端插件之锚点动画跳转
- 自动化运维为什么是必须的?
- MySQL的一些常用SQL语句
- FreeBSD 配置经验
- 基于spring3.0注解实现的spring MVC项目
- 【Unity与23种设计模式】观察者模式(Observer)
- JS高级程序设计读书笔记——第3章
- EasyNVR无插件IPC摄像机直播方案前端构建之:区分页面是自跳转还是分享依据
- linux学习之路6 Vi文本编辑器
- 2017第36届西安春季广告标识办公印刷LED光电照明产业博览会会刊(参展商名录)
- EasyNVR无插件IPC摄像机直播方案前端构建之:如何区分PC端和移动端
- robotframework之frame元素定位
- 初学者的烦恼
- jquery validator简单使用,微复杂度密码校验,错误信息集中展示