设计模式之状态模块加观察者模式
背景:
用户操作鼠标,涉及的动作有左击、右击、双击。每种动作对应一种状态,状态的切换对应着不同的鼠标点击事件。
类图:
状态接口类:
/*** 状态接口**/ 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
设计模式之状态模块加观察者模式相关推荐
- python的out模式_Python设计模式之状态模式
状态模式 面向对象编程着力于在对象交互时改变它们的状态.在很多问题中,有限状态机(通常名为状态机)是一个非常方便的状态转换建模(并在必要时以数学方式形式化)工具.首先,什么是状态机?状态机是一个抽象机 ...
- 8-设计模式之行为型模式二(状态模式、观察者模式、中介者模式)
设计模式之行为型模式二(状态模式.观察者模式.中介者模式) 6.5 状态模式 6.5.1 概述 6.5.2 结构 6.5.3 案例实现 6.5.4 优缺点 6.5.5 使用场景 6.6 观察者模式 6 ...
- JAVA设计模式什么鬼(状态)——作者:凸凹里歐
状态State,指某事物所处的状况或形态,比如水的三态,零下会变成固态冰,常温会是液态水,100℃会蒸发成气态的水蒸气. 在这个地球生态系统中,水的总量并不会增加,也不会减少,只是随着温度的变化其分子 ...
- nodejs学习巩固笔记-nodejs基础,Node.js 高级编程(核心模块、模块加载机制)
目录 Nodejs 基础 大前端开发过程中的必备技能 nodejs 的架构 为什么是 Nodejs Nodejs 异步 IO Nodejs 事件驱动架构 全局对象 全局变量之 process 核心模块 ...
- 设计模式-行为型模式-Observer 观察者模式
设计模式-行为型模式-Observer 观察者模式 1.简介 软件程序之间的解耦,减少相互之间的依赖关系,但是模块之间又是需要协同工作的: 观察者模式使得一个对象的状态发生改变的时候,已经预约的其他对 ...
- 游戏开发设计模式之状态模式 有限状态机 c#委托事件(unity3d 示例实现)
命令模式:游戏开发设计模式之命令模式(unity3d 示例实现) 对象池模式:游戏开发设计模式之对象池模式(unity3d 示例实现) 原型模式:游戏开发设计模式之原型模式 & unity3d ...
- FreeSwitch 的初始化及其模块加载过程
FS 主函数main() Freeswitch的主函数是在文件switch.c中定义的,该文件的260行是整个程序的入口,主函数主要完成的功能是包括,命令行解析,初始化apr库,构建全局内存池,模块加 ...
- 模块加载过程代码分析1
一.概述 模块是作为ELF对象文件存放在文件系统中的,并通过执行insmod程序链接到内核中.对于每个模块,系统都要分配一个包含以下数据结构的内存区. 一个module对象,表示模块名的一个以null ...
- .NET设计模式(19):观察者模式(Observer Pattern)
概述 在软件构建过程中,我们需要为某些对象建立一种"通知依赖关系" --一个对象(目标对象)的状态发生改变,所有的依赖对象(观察者对象)都将得到通知.如果这样的依赖关系过于紧密,将 ...
最新文章
- PKU ACM 1258 Agri-Net http://acm.pku.edu.cn/JudgeOnline/problem?id=1258
- module 'schedule' has no attribute 'every
- java 二维卡尔曼滤波_卡尔曼滤波(Kalman filtering)算法学习小记
- Python爬虫之旅_TWO
- 简单易懂,ThreadPoolExecutor参数说明
- 汽车电子专业知识篇(三)-自动驾驶中的多传感器融合
- 作者:寇纲(1975-),男,博士,西南财经大学工商管理学院教授、博士生导师、执行院长...
- python使用大漠插件进行脚本开发的尝试(一)
- php多个逻辑如何分为多个逻辑块,php 项目如何分层
- mysql 免安装 自启动_MYSQL在Win下免安装zip
- Springboot毕设项目高校食堂饭卡管理824ct(java+VUE+Mybatis+Maven+Mysql)
- 【英语:语法基础】B8.核心语法-并列复合句和主从复合句
- dialog在关闭的时候会刷新页面,并且地址后面多加了一个问号,导致数据查询不出来的解决方法
- Daz3d:如何使用景深
- Hive实现获取指定月的第一天和最后一天
- 解决centos 7 打开php文件直接下载问题
- Spring Boot 错误页配置
- 全息投影手机Alo将引领未来趋势!全息3d 网
- 远程桌面启动matlab
- 腾讯发布智能硬件全民WiFi 可提高游戏速度
热门文章
- visual MySQL 教程_MySql轻松入门系列——第二站 使用visual studio 对mysql进行源码级调试...
- python3 转码的函数_python基础3之文件操作、字符编码解码、函数介绍
- python刷题笔记怎么改_python面试题刷题笔记1 - 10
- k8s nodeport无法访问_k8s学习之service详解
- java timer.schedule如何控制执行次数_Java 分布式任务调度平台:PowerJob 快速开始+配置详解...
- jenkins android sdk,Jenkins为什么找不到Android SDK?
- php和架构,结构和架构的区别是什么?
- ~~~端午安康~~~
- Opencv函数手册
- Ubuntu安装TensorFlow-gpu及cuda9.0(不给自己找麻烦)