Java基于状态模式实现的文档编辑模式切换功能实例

网友投稿 226 2023-08-06

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.GvswUoDSEDIT_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 63; "预览模式" : (r == 1 ? "编辑模式" : "")));

context.doWork(r);

}

}

}

4 运行结果

当前模式:编辑模式

-----------------

编辑模式【新增】...

编辑模式【保存】...

编辑模式【修改】...

编辑模式【查看】...

-----------------

当前模式:编辑模式

-----------------

编辑模式【新增】...

编辑模式【保存】...

编辑模式【修改】...

编辑模式【查看】...

-----------------

当前模式:预览模式

-----------------

预览模式不支持【新增】功能!

预览模式不支持【保存】功能!

预览模式不支持【修改】功能!

预览模式【查看】...

-----------------

当前模式:预览模式

-----------------

预览模式不支持【新增】功能!

预览模式不支持【保存】功能!

预览模式不支持【修改】功能!

预览模式【查看】...

-----------------

当前模式:编辑模式

-----------------

编辑模式【新增】...

编辑模式【保存】...

编辑模式【修改】...

编辑模式【查看】...

-----------------

三该模式设计原则

1 "开——闭"原则

2 单一职责原则

四 使用场合

1 一个对象的行为取状于它的状态,井且它必须在运行时刻根据状态改变其行为。

2 一个操作中含有庞大的多分支结构,并且这些分支决定于对象的状态。

五 状态模式静态类图

更多java相关内容感兴趣的读者可查看本站专题:《Java面向对象程序设计入门与进阶教程》、《Java数据结构与算法教程》、《Java操作DOM节点技巧总结》、《Java文件与目录操作技巧汇总》和《Java缓存操作技巧汇总》

希望本文所述对大家java程序设计有所帮助。

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Struts2学习手册之文件上传基础教程
下一篇:Webpack path与publicPath的区别详解
相关文章

 发表评论

暂时没有评论,来抢沙发吧~