背景:

用户操作鼠标,涉及的动作有左击、右击、双击。每种动作对应一种状态,状态的切换对应着不同的鼠标点击事件。

类图:

状态接口类:

/*** 状态接口**/
public interface State {public void change();
}

鼠标移入类:

public class MouseoverState implements State{public void change(){System.out.println("鼠标移入了。");}
}

鼠标移出类:

public class MouseoutState implements State{public void change() {System.out.println("鼠标移出了。");}
}

鼠标类:

// 被观察者
public class Mouse extends Observable{public enum STATE {MOUSEOVER,MOUSEOUT};private  State state ;public State getState() {return state;}public void setState(State state) {System.out.println("鼠标状态发生了变化。");this.state = state;setChanged() ;notifyObservers(state);}
}

用户操作类:

/*** 操作类,同时也是观察者**/
public class User implements Observer{@Overridepublic void update(Observable o, Object arg) {// TODO Auto-generated method stubState state = (State)arg ;state.change() ;}}

调用类:

public class Main {public static void main(String[] args) {User user = new User() ;Mouse mouse = new Mouse();State state = new MouseoutState() ;// 添加被观察者
        mouse.addObserver(user);// 状态被改变
        mouse.setState(state);}
}

如有不当之处,请给我留言,方便交流与讨论。

转载于:https://www.cnblogs.com/xinzhuangzi/p/4101242.html

设计模式之状态模块加观察者模式相关推荐

  1. python的out模式_Python设计模式之状态模式

    状态模式 面向对象编程着力于在对象交互时改变它们的状态.在很多问题中,有限状态机(通常名为状态机)是一个非常方便的状态转换建模(并在必要时以数学方式形式化)工具.首先,什么是状态机?状态机是一个抽象机 ...

  2. 8-设计模式之行为型模式二(状态模式、观察者模式、中介者模式)

    设计模式之行为型模式二(状态模式.观察者模式.中介者模式) 6.5 状态模式 6.5.1 概述 6.5.2 结构 6.5.3 案例实现 6.5.4 优缺点 6.5.5 使用场景 6.6 观察者模式 6 ...

  3. JAVA设计模式什么鬼(状态)——作者:凸凹里歐

    状态State,指某事物所处的状况或形态,比如水的三态,零下会变成固态冰,常温会是液态水,100℃会蒸发成气态的水蒸气. 在这个地球生态系统中,水的总量并不会增加,也不会减少,只是随着温度的变化其分子 ...

  4. nodejs学习巩固笔记-nodejs基础,Node.js 高级编程(核心模块、模块加载机制)

    目录 Nodejs 基础 大前端开发过程中的必备技能 nodejs 的架构 为什么是 Nodejs Nodejs 异步 IO Nodejs 事件驱动架构 全局对象 全局变量之 process 核心模块 ...

  5. 设计模式-行为型模式-Observer 观察者模式

    设计模式-行为型模式-Observer 观察者模式 1.简介 软件程序之间的解耦,减少相互之间的依赖关系,但是模块之间又是需要协同工作的: 观察者模式使得一个对象的状态发生改变的时候,已经预约的其他对 ...

  6. 游戏开发设计模式之状态模式 有限状态机 c#委托事件(unity3d 示例实现)

    命令模式:游戏开发设计模式之命令模式(unity3d 示例实现) 对象池模式:游戏开发设计模式之对象池模式(unity3d 示例实现) 原型模式:游戏开发设计模式之原型模式 & unity3d ...

  7. FreeSwitch 的初始化及其模块加载过程

    FS 主函数main() Freeswitch的主函数是在文件switch.c中定义的,该文件的260行是整个程序的入口,主函数主要完成的功能是包括,命令行解析,初始化apr库,构建全局内存池,模块加 ...

  8. 模块加载过程代码分析1

    一.概述 模块是作为ELF对象文件存放在文件系统中的,并通过执行insmod程序链接到内核中.对于每个模块,系统都要分配一个包含以下数据结构的内存区. 一个module对象,表示模块名的一个以null ...

  9. .NET设计模式(19):观察者模式(Observer Pattern)

    概述 在软件构建过程中,我们需要为某些对象建立一种"通知依赖关系" --一个对象(目标对象)的状态发生改变,所有的依赖对象(观察者对象)都将得到通知.如果这样的依赖关系过于紧密,将 ...

最新文章

  1. PKU ACM 1258 Agri-Net http://acm.pku.edu.cn/JudgeOnline/problem?id=1258
  2. module 'schedule' has no attribute 'every
  3. java 二维卡尔曼滤波_卡尔曼滤波(Kalman filtering)算法学习小记
  4. Python爬虫之旅_TWO
  5. 简单易懂,ThreadPoolExecutor参数说明
  6. 汽车电子专业知识篇(三)-自动驾驶中的多传感器融合
  7. 作者:寇纲(1975-),男,博士,西南财经大学工商管理学院教授、博士生导师、执行院长...
  8. python使用大漠插件进行脚本开发的尝试(一)
  9. php多个逻辑如何分为多个逻辑块,php 项目如何分层
  10. mysql 免安装 自启动_MYSQL在Win下免安装zip
  11. Springboot毕设项目高校食堂饭卡管理824ct(java+VUE+Mybatis+Maven+Mysql)
  12. 【英语:语法基础】B8.核心语法-并列复合句和主从复合句
  13. dialog在关闭的时候会刷新页面,并且地址后面多加了一个问号,导致数据查询不出来的解决方法
  14. Daz3d:如何使用景深
  15. Hive实现获取指定月的第一天和最后一天
  16. 解决centos 7 打开php文件直接下载问题
  17. Spring Boot 错误页配置
  18. 全息投影手机Alo将引领未来趋势!全息3d 网
  19. 远程桌面启动matlab
  20. 腾讯发布智能硬件全民WiFi 可提高游戏速度

热门文章

  1. visual MySQL 教程_MySql轻松入门系列——第二站 使用visual studio 对mysql进行源码级调试...
  2. python3 转码的函数_python基础3之文件操作、字符编码解码、函数介绍
  3. python刷题笔记怎么改_python面试题刷题笔记1 - 10
  4. k8s nodeport无法访问_k8s学习之service详解
  5. java timer.schedule如何控制执行次数_Java 分布式任务调度平台:PowerJob 快速开始+配置详解...
  6. jenkins android sdk,Jenkins为什么找不到Android SDK?
  7. php和架构,结构和架构的区别是什么?
  8. ~~~端午安康~~~
  9. Opencv函数手册
  10. Ubuntu安装TensorFlow-gpu及cuda9.0(不给自己找麻烦)