java改写模式_Java基于状态模式实现的文档编辑模式切换功能实例
本文实例讲述了Java基于状态模式实现的文档编辑模式切换功能。分享给大家供大家参考,具体如下:
一 模式定义
状态模式:当一个对象的内在状态改变时允许改变其行为,这个对象看起来就像是改变了其类。
二 模式举例
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 一个操作中含有庞大的多分支结构,并且这些分支决定于对象的状态。
五 状态模式静态类图
希望本文所述对大家java程序设计有所帮助。
java改写模式_Java基于状态模式实现的文档编辑模式切换功能实例相关推荐
- java openoffice 打印_java调用openoffice将office系列文档转换为PDF的示例方法
前导: 发过程中经常会使用java将office系列文档转换为PDF, 一般都使用微软提供的openoffice+jodconverter 实现转换文档. openoffice既有windows版本也 ...
- java模板变量_java freemarker + word 模板 生成 word 文档 (变量替换,数据的循环,表格数据的循环,以及图片的替换)...
1,最近有个需求,动态生成 Word 文当并供前端下载,网上找了一下,发现基本都是用 word 生成 xml 然后用模板替换变量的方式 1.1,这种方式虽然可行,但是生成的 xml 是在是太乱了,整理 ...
- r.java美发更改_JAVA基于MVC模式下的理发管理系统
每天记录学习,每天会有好心情.*^_^* 今天将为大家分析一个理发管理系统(该系统基于JAVA语言开发,设计过程中充分利用MVC设计模式.针对行业的管理需求,以日常管理为核心,构建集员工信息管理模块, ...
- java xml 查询_Java DOM解析器 - 查询XML文档
演示示例 这是需要我们查询的输入XML文件: Ferarri 101 Ferarri 201 Ferarri 301 Lamborgini 001 Lamborgini 002 Lamborgini ...
- java poi 水印_JAVA不使用POI给Word文档添加水印
程序员在开发项目时,经常需要给一些图片.文件添加水印,但往往代码编写复杂,只能是先将文件上传再调用Graphics类才能实现这一功能.但是最无奈的是这个类只能给图片添加水印,而无法通过程序给Word文 ...
- java word 模板_java通过word模板生成word文档
public static void main(String[] args) { //模板.文件.图片路径 String workPath=System.getProperty("user. ...
- Java描述设计模式(21):状态模式
本文源码:GitHub·点这里 || GitEE·点这里 一.生活场景 1.场景描述 变色龙是爬行动物,是非常奇特的动物,它有适于树栖生活的种种特征和行为,身体也会随着环境的变化而变化出适应环境的颜色 ...
- java设计与模式_设计模式《JAVA与模式》之状态模式
在阎宏博士的<JAVA与模式>一书中开头是这样描述状态(State)模式的: 状态模式,又称状态对象模式(Pattern of Objects for States),状态模式是对象的行为 ...
- 8-设计模式之行为型模式二(状态模式、观察者模式、中介者模式)
设计模式之行为型模式二(状态模式.观察者模式.中介者模式) 6.5 状态模式 6.5.1 概述 6.5.2 结构 6.5.3 案例实现 6.5.4 优缺点 6.5.5 使用场景 6.6 观察者模式 6 ...
最新文章
- struts2中解决下载文件名中文乱码问题
- spring cloud 配置中心
- java 输入流关闭顺序_JAVA的节点流和处理流以及流的关闭顺序
- 软件工程复习提纲——第十一章
- SpringBoot2.0系列(03)---SpringBoot之使用freemark视图模板
- 有关日期的函数操作用法总结,to_date(),trunc(),add_months();
- POJ 2886 能被3除尽的数之和
- zabbix 自动发现
- [lammps安装教程]lammps串行版安装教程
- 对比苏州和杭州这两座城市,你会发现?
- 电子信息工程考研方向计算机,电子信息工程考研方向
- tornado, twister, cyclone,Typhoon,hurricane…到底如何区别?
- HTTP协议:接口测试_发送请求_post方法
- Mysql正则表达式查询
- 项目管理过程之进度控制
- python画双坐标图_Python双Y轴可视化
- css template download
- SQL Server中的自连接和全外连接
- ECC功能简述及其原理
- 分布式任务调度平台XXL-JOB的简单使用
热门文章
- 记ubuntu16.04的一个网络问题
- win7 VS2013 新建工程 编译lua5.2.0 静态库
- eclipse开发javaweb项目配置tomcat
- npm ERR! code ELIFECYCLE【最好记的解决方案】
- 【Java基础】static初始化块
- JDK 14的新特性:switch表达式
- 一文弄懂EnumMap和EnumSet
- oracle自带split函数_Pandas 基本使用(三) — DataFrame.to_dict() 函数基本使用
- 在linux服务器上安装Jenkins
- 原生JS封装自己的AJAX