关于观察者模式的总结
2016-01-12 12:31
453 查看
Observer(观察者模式):定义对象间的一种一对多的依赖关系,以便当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并自动刷新。
OBSERVER—想知道咱们公司最新MM情报吗?加入公司的MM情报邮件组就行了,tom负责搜集情报,他发现的新情报不用一个一个通知我们,直接发布给邮件组,我们作为订阅者(观察者)就可以及时收到情报啦
所涉及的原则:
为了交互对象之间的松耦合设计而努力
类图:
Observer模式的角色:
Subject(被观察者)
被观察的对象。当需要被观察的状态发生变化时,需要通知队列中所有观察者对象。Subject需要维持(添加,删除,通知)一个观察者对象的队列列表。
ConcreteSubject
被观察者的具体实现。包含一些基本的属性状态及其他操作。
Observer(观察者)
接口或抽象类。当Subject的状态发生变化时,Observer对象将通过一个callback函数得到通知。
ConcreteObserver
观察者的具体实现。得到通知后将完成一些具体的业务逻辑处理。
并且,java的jdk中有类似的api可以供我们来使用。
典型例子:,用户界面可以作为一个观察者,业务数据是被观察者,用户界面观察业务数据的变化,发现数据变化后,就显示在界面上。面向对象设计的一个原则是:系统中的每个类将重点放在某一个功能上,而不是其他方面。一个对象只做一件事情,并且将他做好。观察者模式在模块之间划定了清晰的界限,提高了应用程序的可维护性和重用性。
观察者设计模式定义了对象间的一种一对多的依赖关系,以便一个对象的状态发生变化时,所有依赖于它的对象都得到通知并自动刷新。
个人理解:agent2d中的世界模型,大概就是设计到了观察者模式。世界模型中的每一次变化,都会更新里面的一些内容。而每一个球员会获得自己所观察到的世界模型。然后根据世界模型进行判断处理,利用机器学习算法来处理这些信息,最终执行好的决策。
OBSERVER—想知道咱们公司最新MM情报吗?加入公司的MM情报邮件组就行了,tom负责搜集情报,他发现的新情报不用一个一个通知我们,直接发布给邮件组,我们作为订阅者(观察者)就可以及时收到情报啦
所涉及的原则:
为了交互对象之间的松耦合设计而努力
类图:
Observer模式的角色:
Subject(被观察者)
被观察的对象。当需要被观察的状态发生变化时,需要通知队列中所有观察者对象。Subject需要维持(添加,删除,通知)一个观察者对象的队列列表。
ConcreteSubject
被观察者的具体实现。包含一些基本的属性状态及其他操作。
Observer(观察者)
接口或抽象类。当Subject的状态发生变化时,Observer对象将通过一个callback函数得到通知。
ConcreteObserver
观察者的具体实现。得到通知后将完成一些具体的业务逻辑处理。
并且,java的jdk中有类似的api可以供我们来使用。
典型例子:,用户界面可以作为一个观察者,业务数据是被观察者,用户界面观察业务数据的变化,发现数据变化后,就显示在界面上。面向对象设计的一个原则是:系统中的每个类将重点放在某一个功能上,而不是其他方面。一个对象只做一件事情,并且将他做好。观察者模式在模块之间划定了清晰的界限,提高了应用程序的可维护性和重用性。
观察者设计模式定义了对象间的一种一对多的依赖关系,以便一个对象的状态发生变化时,所有依赖于它的对象都得到通知并自动刷新。
个人理解:agent2d中的世界模型,大概就是设计到了观察者模式。世界模型中的每一次变化,都会更新里面的一些内容。而每一个球员会获得自己所观察到的世界模型。然后根据世界模型进行判断处理,利用机器学习算法来处理这些信息,最终执行好的决策。
相关文章推荐
- 算法之美隆重上市欢迎关注(更有三重好礼)
- 对话框封装类(普通对话框,列表对话框,单选按钮对话框,复选对话框)
- iOS 终端导出推送p12 文件
- PHP5中PDO的简单使用
- 2016随笔
- C++的学习技巧!
- linux下安装MySQL出错file /usr/share/mysql/charsets/latin2.xml from install of MySQL-......
- 在myeclipse中maven部署流程及遇见的问题
- java多线程--生产者和消费者模型
- leetcode——Evaluate Reverse Polish Notation 求算式值(AC)
- Android源码分析笔记--Handler机制
- eclipse 的一些小知识
- 磁盘和文件系统管理(一)
- 不依赖jquery的图片LazyLoad按需加载js-echo.js
- Android进阶——安卓接入微信,获取OpenID
- 路由器和三层交换机的区别?
- 都在说EventBus,我也来一波EventBus
- ios app图片角标
- 学习mongo系列(五) AND,$or,$type
- Git安装及配置