博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
观察者模式
阅读量:6124 次
发布时间:2019-06-21

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

  • 定义

观察者模式定义了对象之间的一对多依赖,当一个对象改变时。所以依赖于它的对象都会得到通知。

  • 演示样例
interface Observer {
void update(int data);}class NewsPaper {
private LinkedList
observers; public NewsPaper() {
observers = new LinkedList<>(); } public void subscribe(Observer o) {
observers.add(o); } public void unsubscribe(Observer o) {
observers.remove(o); } public void changeData(int data) {
for (Observer o : observers) {
o.update(data); } }}class Reader implements Observer {
private String name; public Reader(NewsPaper paper, String name) {
this.name = name; paper.subscribe(this); } @Override public void update(int data) {
System.out.println(name + " update data:" + data); }}public class TestObserve {
public static void main(String[] args) {
NewsPaper newsPaper = new NewsPaper(); Reader tom = new Reader(newsPaper, "tom"); Reader jack = new Reader(newsPaper, "jack"); newsPaper.changeData(10); System.out.println("--"); newsPaper.unsubscribe(tom); newsPaper.changeData(5); }}

全部 Reader 都是观察者,当他订阅了 NewsPaper 后。NewsPaper 一有新数据,就会通知全部订阅了它的 Reader。

  • 为什么

为什么要使用观察者模式?由于在初始化被观察者时,并不知道当数据变化时。须要通知谁。

须要通知的对象是动态变化的。

  • 谁还用了观察者模式

在 GUI 编程时。我们想要在事件被触发时,运行我们指定的动作。

比如想在button被点击时弹窗体。就能够通过类似AddListener。将已经实现对应接口的对象加入到button的“订阅列表”中。当button被点击时,系统会依次调用“订阅列表”中对象的对应方法。弹窗体因此被触发。

转载地址:http://zcwua.baihongyu.com/

你可能感兴趣的文章
Linux下的CPU性能瓶颈分析案例
查看>>
spring mvc入门
查看>>
2012在数据库技术会议上的讲话PPT打包
查看>>
【Android】 TextView设置个别字体样式
查看>>
python svn
查看>>
raise语句
查看>>
sequence2(高精度dp)
查看>>
ABP实战--集成Ladp/AD认证
查看>>
存储过程
查看>>
phpcms v9栏目列表调用每一篇文章内容方法
查看>>
python 自定义信号处理器
查看>>
luov之SMTP报错详解
查看>>
软件概要设计做什么,怎么做
查看>>
dwr
查看>>
java的特殊符号
查看>>
word2010中去掉红色波浪线的方法
查看>>
fabric上下文管理器(context mangers)
查看>>
JQuery-EasyUI Datagrid数据行鼠标悬停/离开事件(onMouseOver/onMouseOut)
查看>>
并发和并行的区别
查看>>
php小知识
查看>>