本文实例讲述了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基于状态模式实现的文档编辑模式切换功能实例相关推荐

  1. java openoffice 打印_java调用openoffice将office系列文档转换为PDF的示例方法

    前导: 发过程中经常会使用java将office系列文档转换为PDF, 一般都使用微软提供的openoffice+jodconverter 实现转换文档. openoffice既有windows版本也 ...

  2. java模板变量_java freemarker + word 模板 生成 word 文档 (变量替换,数据的循环,表格数据的循环,以及图片的替换)...

    1,最近有个需求,动态生成 Word 文当并供前端下载,网上找了一下,发现基本都是用 word 生成 xml 然后用模板替换变量的方式 1.1,这种方式虽然可行,但是生成的 xml 是在是太乱了,整理 ...

  3. r.java美发更改_JAVA基于MVC模式下的理发管理系统

    每天记录学习,每天会有好心情.*^_^* 今天将为大家分析一个理发管理系统(该系统基于JAVA语言开发,设计过程中充分利用MVC设计模式.针对行业的管理需求,以日常管理为核心,构建集员工信息管理模块, ...

  4. java xml 查询_Java DOM解析器 - 查询XML文档

    演示示例 这是需要我们查询的输入XML文件: Ferarri 101 Ferarri 201 Ferarri 301 Lamborgini 001 Lamborgini 002 Lamborgini ...

  5. java poi 水印_JAVA不使用POI给Word文档添加水印

    程序员在开发项目时,经常需要给一些图片.文件添加水印,但往往代码编写复杂,只能是先将文件上传再调用Graphics类才能实现这一功能.但是最无奈的是这个类只能给图片添加水印,而无法通过程序给Word文 ...

  6. java word 模板_java通过word模板生成word文档

    public static void main(String[] args) { //模板.文件.图片路径 String workPath=System.getProperty("user. ...

  7. Java描述设计模式(21):状态模式

    本文源码:GitHub·点这里 || GitEE·点这里 一.生活场景 1.场景描述 变色龙是爬行动物,是非常奇特的动物,它有适于树栖生活的种种特征和行为,身体也会随着环境的变化而变化出适应环境的颜色 ...

  8. java设计与模式_设计模式《JAVA与模式》之状态模式

    在阎宏博士的<JAVA与模式>一书中开头是这样描述状态(State)模式的: 状态模式,又称状态对象模式(Pattern of Objects for States),状态模式是对象的行为 ...

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

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

最新文章

  1. struts2中解决下载文件名中文乱码问题
  2. spring cloud 配置中心
  3. java 输入流关闭顺序_JAVA的节点流和处理流以及流的关闭顺序
  4. 软件工程复习提纲——第十一章
  5. SpringBoot2.0系列(03)---SpringBoot之使用freemark视图模板
  6. 有关日期的函数操作用法总结,to_date(),trunc(),add_months();
  7. POJ 2886 能被3除尽的数之和
  8. zabbix 自动发现
  9. [lammps安装教程]lammps串行版安装教程
  10. 对比苏州和杭州这两座城市,你会发现?
  11. 电子信息工程考研方向计算机,电子信息工程考研方向
  12. tornado, twister, cyclone,Typhoon,hurricane…到底如何区别?
  13. HTTP协议:接口测试_发送请求_post方法
  14. Mysql正则表达式查询
  15. 项目管理过程之进度控制
  16. python画双坐标图_Python双Y轴可视化
  17. css template download
  18. SQL Server中的自连接和全外连接
  19. ECC功能简述及其原理
  20. 分布式任务调度平台XXL-JOB的简单使用

热门文章

  1. 记ubuntu16.04的一个网络问题
  2. win7 VS2013 新建工程 编译lua5.2.0 静态库
  3. eclipse开发javaweb项目配置tomcat
  4. npm ERR! code ELIFECYCLE【最好记的解决方案】
  5. 【Java基础】static初始化块
  6. JDK 14的新特性:switch表达式
  7. 一文弄懂EnumMap和EnumSet
  8. oracle自带split函数_Pandas 基本使用(三) — DataFrame.to_dict() 函数基本使用
  9. 在linux服务器上安装Jenkins
  10. 原生JS封装自己的AJAX