2019独角兽企业重金招聘Python工程师标准>>>

这个模式比较常用特别是在ui界面设计的过程中,android的监听器就是观察者模式。从表面上看一个物体发生变化,会引起另一个物体的反应。首先是两个类,当一个类发消息的时候,另一个类会发生变化。其实是发生变化的类调用了另一个类的函数,执行的是另一个类的函数。从层次上说,应该是一个类中包含了另一个类的引用,发消息的类是代理了另一个类的功能。从语言的层次上,只是简单的类的组合。

想抽象出来两个类按钮和监听按钮的事件:

Button:能发出变化,变化的效果是调用的另一个类。

interface Button {void add(Lister lister);void notif();}

Lister:真实处理变化的功能类

public interface Lister {void update(String name);
}

一个具体的按钮:

class Radio implements Button{Lister lister;String name;Radio(String name){this.name = name;}@Overridepublic void add(Lister lister) {this.lister = lister;}@Overridepublic void notif() {lister.update(name);}}

单选按钮点击后把名字打印出来:

public class ButtonLister implements Lister{@Overridepublic void update(String name) {System.out.println(name+ "按下去了");}}

测试:

class Test {public static void main(String[] args) {ButtonLister lister = new ButtonLister();Radio radio = new Radio("按钮1");radio.add(lister);radio.notif();}}

结果:

按钮1按下去了

这个模式学了以后会很容易的理解ui界面的逻辑,他是在一个构件上注册一个监听器,监听器会根据不同的动作作出不同的反应,双击、单击等不同的操作。

转载于:https://my.oschina.net/liuxinquan/blog/651887

我理解的--java观察者模式相关推荐

  1. Java观察者模式理解和实现

    今天本想一本正经的把RxJava看一看,想着前段时间RxJava都已经到了第二版,而自己RxJava的认识还只是很基础,甚至连基础都算不上,所以本着以后能在项目里优雅地把他用出来的想法,我开始了RxJ ...

  2. java 观察者模式示例_观察者设计模式示例

    java 观察者模式示例 本文是我们名为" Java设计模式 "的学院课程的一部分. 在本课程中,您将深入研究大量的设计模式,并了解如何在Java中实现和利用它们. 您将了解模式如 ...

  3. java 观察者模式示例_Java中的观察者设计模式-示例教程

    java 观察者模式示例 观察者模式是行为设计模式之一 . 当您对对象的状态感兴趣并希望在发生任何更改时得到通知时,观察者设计模式很有用. 在观察者模式中,监视另一个对象状态的对象称为Observer ...

  4. java观察者模式本质_6.[研磨设计模式笔记]观察者模式

    1.定义 定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并自动更新. 2.解决问题 --订阅报纸 看起来订阅者是直接根有据打交道,但实际上,订阅者的订阅数据 ...

  5. 一文带你深入理解【Java基础】· 枚举类

    写在前面 Hello大家好, 我是[麟-小白],一位软件工程专业的学生,喜好计算机知识.希望大家能够一起学习进步呀!本人是一名在读大学生,专业水平有限,如发现错误或不足之处,请多多指正!谢谢大家!!! ...

  6. [Java]观察者模式和中介者模式改造机场

    [Java]观察者模式和中介者模式改造机场 文章目录 [Java]观察者模式和中介者模式改造机场 题目 代码部分 运行结果 补充 题目 请以下面的情景为基础,将以下的情景进行 优化: 1. 定义4个处 ...

  7. 一文带你深入理解【Java基础】· Java基本语法:程序流程控制

    写在前面 Hello大家好, 我是[麟-小白],一位软件工程专业的学生,喜好计算机知识.希望大家能够一起学习进步呀!本人是一名在读大学生,专业水平有限,如发现错误或不足之处,请多多指正!谢谢大家!!! ...

  8. 第二季:7.怎么查看服务器默认的垃圾收集器是那个?生产上如何配置垃圾收集器的?谈谈你对垃圾收集器的理解?【Java面试题】

    第二季:7.怎么查看服务器默认的垃圾收集器是那个?生产上如何配置垃圾收集器的?谈谈你对垃圾收集器的理解?[Java面试题] 前言 推荐 7.怎么查看服务器默认的垃圾收集器是那个?生产上如何配置垃圾收集 ...

  9. 深入理解Android Java虚拟机ART相关及勘误

    公众号: 神农和朋友们的杂文集 目录 本书的简单介绍 本书各章的难度评估 深入学习有什么好处? 本书勘误表 P14 P21 本书的简单介绍 <深入理解Android Java虚拟机ART> ...

最新文章

  1. 不甘心只做输入工具,搜狗输入法上线AI助手,提供智能服务
  2. SQL Server 中 SELECT INTO 和 INSERT INTO SELECT语句的区别
  3. 第一次用access的数据库是连接字符串问题
  4. python3.6sysos_求大佬,这是什么情况啊
  5. linux命令passwd各个参数含义
  6. 来了解一下K8S的Operator模式
  7. python爬取数据生成词云_Python 爬取生成中文词云以爬取知乎用户属性为例
  8. Cloudera Manager 安装 CDH5.x 心得
  9. hibernate5.x下载地址
  10. layui图片放大功能
  11. pr中如何自定义序列尺寸
  12. Laravel使用Seeder自动填充数据
  13. 基于51单片机的篮球记分牌设计
  14. 智能手机屏幕失灵了,怎么办?
  15. Dubbo是什么?能做什么?架构图?
  16. K-S指标校验评分卡
  17. 膨胀卷积(空洞卷积 dilated convolution)
  18. 鲁大师2022年度硬件榜单即将出炉,多维度看谁能夺奖?
  19. AI-常见机器学习算法介绍
  20. 高速PCB设计入门概念

热门文章

  1. 文档工具GitBook使用
  2. 使用Core Animation对象来实现动画
  3. echarts与TmodJS的冲突 -- 模块化加载器之间的冲突
  4. struts2 开发
  5. 使用google开源框架Exoplayer开发自定义播放器
  6. 【CCAI大咖秀】AlphaGo/Mobileye教父:智能科学需要融合机器学习、计算神经科学与认知科学
  7. 区块链2.0:智能合约
  8. mysql 8.0 ~ 存储和账户
  9. nginx 配置简介
  10. [ASP.NET MVC] 利用动态注入HTML的方式来设计复杂页面