一模式定义
状态模式:当一个对象的内在状态改变时允许改变其行为,这个对象看起来就像是改变了其类。
二模式举例
1模式分析
我们借用文档编辑模式切换这一案例来说明这一模式。
2状态模式静态类图
3代码示例
3.1创建状态接口一IState
package com.demo.state; import com.demo.context.Context; /** * * 状态接口 * * @author * */ public interface IState { /** * 状态转换 * * @param context * @param mode */ public void convertState(Context context, int mode); /** * 保存方法 * * @param context */ public void save(Context context); /** * 修改方法 * * @param context */ public void modify(Context context); /** * 新增方法 * * @param context */ public void add(Context context); /** * 查看方法 * * @param context */ public void view(Context context); }
3.2创建上下文环境一Context
package com.demo.context; import com.demo.state.IState; /** * 上下文环境 * * @author * */ public class Context { // 预览模式 public static final int PREVIEW_MODE = 0; // 编辑模式 public static final int EDIT_MODE = 1; // 当前状态 private IState state; // 改变状态 public void changeState(IState state) { this.state = state; } /** * 运行 * * @param mode */ public void doWork(int mode) { System.out.println("-----------------"); this.state.convertState(this, mode); this.state.add(this); this.state.save(this); this.state.modify(this); this.state.view(this); System.out.println("-----------------"); } }
3.3编辑状态一EditState
package com.demo.state; import com.demo.context.Context; /** * 编辑模式状态 * * @author * */ public class EditState implements IState { /** * 状态转换 */ public void convertState(Context context, int mode) { if (mode == Context.PREVIEW_MODE) { context.changeState(new PreviewState()); } } /** * 编辑模式新增 */ public void add(Context context) { System.out.println("编辑模式【新增】..."); } /** * 编辑模式修改 */ public void modify(Context context) { System.out.println("编辑模式【修改】..."); } /** * 编辑模式保存 */ public void save(Context context) { System.out.println("编辑模式【保存】..."); } /** * 编辑模式查看 */ public void view(Context context) { System.out.println("编辑模式【查看】..."); } }
3.4预览状态一PreviewState
package com.demo.state; import com.demo.context.Context; /** * 预览模式状态 * * @author * */ public class PreviewState implements IState { /** * 状态转换 */ public void convertState(Context context, int mode) { if (mode == Context.EDIT_MODE) { context.changeState(new EditState()); } } /** * 预览模式新增 */ public void add(Context context) { System.out.println("预览模式不支持【新增】功能!"); } /** * 预览模式修改 */ public void modify(Context context) { System.out.println("预览模式不支持【修改】功能!"); } /** * 预览模式保存 */ public void save(Context context) { System.out.println("预览模式不支持【保存】功能!"); } /** * 预览模式查看 */ public void view(Context context) { System.out.println("预览模式【查看】..."); } }
3.5客户端测式一Client
package com.demo; import java.util.Random; import com.demo.context.Context; import com.demo.state.EditState; /** * 客户端应用 * * @author * */ public class Client { /** * @param args */ public static void main(String[] args) { Context context = new Context(); context.changeState(new EditState()); Random random = new Random(); for (int i = 0; i < 5; i++) { int r = random.nextInt(2); System.out.println("当前模式:" + (r == 0 ? "预览模式" : (r == 1 ? "编辑模式" : ""))); context.doWork(r); } } }
4运行结果
当前模式:编辑模式
-----------------
编辑模式【新增】...
编辑模式【保存】...
编辑模式【修改】...
编辑模式【查看】...
-----------------
当前模式:编辑模式
-----------------
编辑模式【新增】...
编辑模式【保存】...
编辑模式【修改】...
编辑模式【查看】...
-----------------
当前模式:预览模式
-----------------
预览模式不支持【新增】功能!
预览模式不支持【保存】功能!
预览模式不支持【修改】功能!
预览模式【查看】...
-----------------
当前模式:预览模式
-----------------
预览模式不支持【新增】功能!
预览模式不支持【保存】功能!
预览模式不支持【修改】功能!
预览模式【查看】...
-----------------
当前模式:编辑模式
-----------------
编辑模式【新增】...
编辑模式【保存】...
编辑模式【修改】...
编辑模式【查看】...
-----------------
三该模式设计原则
1"开——闭"原则
2单一职责原则
四使用场合
1一个对象的行为取状于它的状态,井且它必须在运行时刻根据状态改变其行为。
2一个操作中含有庞大的多分支结构,并且这些分支决定于对象的状态。
五状态模式静态类图
相关推荐
目 录 1基本操作 4 1.1启动和认识Word 2010工作界面 4 1.2新建... 法一:按键盘上的"Insert"键 法二:单击状态栏的"插入"或"改写"按钮 2.1.2插入符号 "插入"选项卡——>符号——>其他符号 2.2文本的编辑 2.2.1选定文本
选择模式之一选定文本块之后,可以使用“Ctrl-G”切换到另一模式——该模式很少在Linux上 使用,本文中就不再介绍了。 Vim带有完整的帮助文档。在当前的Vim 6.4的标准发布中,有一百多章、近六十万英文词的帮助文 件...
asp.net 2.0下嵌套masterpage页的可视化编辑 C# 2.0与泛型 动态调用对象的属性和方法——性能和灵活性兼备的方法 泛型技巧系列:用泛型打造可复用的抽象工厂 泛型技巧系列:如何提供类型参数之间的转换 .NET 2.0 ...
ctrl+tab——在打开的各个设计文件文档之间切换 alt+tab——在打开的各个应用程序之间切换 a——弹出edit\align子菜单 b——弹出view\toolbars子菜单 e——弹出edit菜单 f——弹出file菜单 h——弹出help菜单 j——...
机器人运行完"HOME"例行程序后,将机器人运行模式切换到自动状态,机器人进入自 动运行状态; 1. 生产结束后,需要对机器人做保养时,按下请求服务按钮,机器人将会自动运行到 服务位,待机器人完全停止时,拉开门上...
- 文件编辑器,文件树目录 上下左右键盘切换 快捷键加入 - 树目录去掉库,改为个人目录等多处文案修改 - 默认打开用户目录 ####fix bug:(bug解决和程序优化) - 桌面任务栏点不中bug - 部分文案问题 - 众多...
24、支持普通论坛模式、普通树形模式、豪华树形模式三种个性模式,支持自由切换,可以自行设定默认的论坛显示模式; 25、默认提供8种论坛风格,可以设置默认的论坛,也可以在前台由用户自己选择喜欢的风格,所有...
20.4.6 实现对话框切换 20.4.7 创建订单ID 20.4.8 存储订单数据 20.4.9 为订单选择产品 20.4.10 添加新订单 20.5 小结 20.6 练习 第21章 使用Windows Forms的应用程序 21.1 理解Wqndows Forms 21.2 理解Windows ...
\ 第4章 程序主窗口—— QMainWindow 卢传富 Qt应用程序的主窗口是由多个部件/组件构成的框架,本章通过一个简单文本编辑器的例子,介绍了主窗口的菜单、工具条、中心部件、锚接部件和状态条,并通过Qt设计器绘制和...
20.4.6 实现对话框切换 20.4.7 创建订单ID 20.4.8 存储订单数据 20.4.9 为订单选择产品 20.4.10 添加新订单 20.5 小结 20.6 练习 第21章 使用Windows Forms的应用程序 21.1 理解Wqndows Forms 21.2 理解Windows ...
20.4.6 实现对话框切换 20.4.7 创建订单ID 20.4.8 存储订单数据 20.4.9 为订单选择产品 20.4.10 添加新订单 20.5 小结 20.6 练习 第21章 使用Windows Forms的应用程序 21.1 理解Wqndows Forms 21.2 理解Windows ...
20.4.6 实现对话框切换 20.4.7 创建订单ID 20.4.8 存储订单数据 20.4.9 为订单选择产品 20.4.10 添加新订单 20.5 小结 20.6 练习 第21章 使用Windows Forms的应用程序 21.1 理解Wqndows Forms 21.2 理解Windows ...
20.4.6 实现对话框切换 20.4.7 创建订单ID 20.4.8 存储订单数据 20.4.9 为订单选择产品 20.4.10 添加新订单 20.5 小结 20.6 练习 第21章 使用Windows Forms的应用程序 21.1 理解Wqndows Forms 21.2 理解Windows ...
20.4.6 实现对话框切换 20.4.7 创建订单ID 20.4.8 存储订单数据 20.4.9 为订单选择产品 20.4.10 添加新订单 20.5 小结 20.6 练习 第21章 使用Windows Forms的应用程序 21.1 理解Wqndows Forms 21.2 理解Windows ...
\ 第4章 程序主窗口—— QMainWindow 卢传富 Qt应用程序的主窗口是由多个部件/组件构成的框架,本章通过一个简单文本编辑器的例子,介绍了主窗口的菜单、工具条、中心部件、锚接部件和状态条,并通过Qt设计器绘制和...
tftp -i 自己IP(用肉机作跳板时这用肉机IP) get server.exec:server.exe 登陆后,将“IP”的server.exe下载到目标主机c:server.exe 参数:-i指以二进制模式传送,如传送exe文件时用,如不加-i 则以ASCII模式(传送...
每按一下,标记0和1会切换,大家在用的时候可以自己在“设置”——“软件设置”——“键盘”——类别里面选“字幕”,然后找到“设此行为待定行”菜单,设置一个熟悉的快捷键。我是设置成了F7,比较方便,因为我经常...
2.3 创建第一个Android项目——HeUoAndroid 2.3.1 创建HelloAndroid项目 2.3.2 运行HelloAndroid及模拟器的使用 2.3.3 调试HelloAndroid 2.4 小结 第二部分 基础篇 第3章 Android程序设计基础 3.1 Android程序框架 ...