`
cakin24
  • 浏览: 1395219 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

状态模式——文档编辑模式切换

阅读更多

一模式定义

状态模式:当一个对象的内在状态改变时允许改变其行为,这个对象看起来就像是改变了其类。

 

二模式举例

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一个操作中含有庞大的多分支结构,并且这些分支决定于对象的状态。

 

五状态模式静态类图



 

  • 大小: 105.4 KB
  • 大小: 43.9 KB
  • 大小: 66.6 KB
1
1
分享到:
评论

相关推荐

    jquery基础实例002——可编辑的表格

    7. **动画效果**:jQuery的动画功能可以让用户体验更流畅,比如在切换编辑模式时,可能添加淡入淡出效果。 8. **代码组织**:为了保持代码的可读性和可维护性,可能会使用到jQuery的`$(document).ready()`来确保...

    第四章第五节——多文档程序

    4. **激活和切换**:用户在MDI环境中切换文档时,应用程序需要更新当前活动的子窗口,并确保所有相关的用户界面元素(如工具栏按钮、状态栏信息)与活动文档同步。 5. **数据保存和恢复**:MDI应用程序需要提供保存...

    android——API中文文档

    `ToggleButton`用于创建开关按钮,可以在打开和关闭状态之间切换。 ### 14. ViewStub `ViewStub`用于在布局中预留空间,以便在运行时根据需要动态加载视图。 ### 15. GridView `GridView`用于以网格的形式展示一...

    Android2.2 API中文文档——View

    ### Android2.2 API中文文档——View #### 概述 在Android开发中,`View`是最基本的UI组件,所有可见的用户界面元素都是通过继承`View`类实现的。`View`类定义了控件的行为和外观,并且提供了绘制、布局、处理触摸...

    C#多文档文本编辑器

    本文将深入探讨如何利用C#语言构建一个具备基本功能和复杂格式处理能力的多文档文本编辑器——CSharpNotepad。 首先,我们来理解“多文档”这一概念。在C#多文档文本编辑器中,"多文档"意味着用户可以在同一程序...

    设计模式精解(GoF 23 种设计模式解析)

    - **缺点**:状态模式的使用必然会增加系统的类和对象的数量。 **3.4 Observer模式** - **定义**:定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。 -...

    计算机应用基础课件——Word排版知识.pptx

    滚动条和视图切换按钮则帮助用户在文档间导航和调整查看模式。状态栏显示当前文档的状态信息,如字数统计。文档编辑区是实际编写和编辑文本的地方,而任务窗格则提供特定任务的辅助工具和选项。 自定义工具栏和...

    Word 2010办公应用案例视频教程下载第8章 视图和窗口操作——对比查看员工规章制度文档.zip

    在Word 2010中,视图是指用户查看和编辑文档的方式。主要包括以下几种视图模式:草稿、Web版式、页面视图、阅读版式和大纲视图。草稿视图适合快速输入文本,Web版式则考虑了网页的显示效果,页面视图则能预览文档...

    C#电子书——快捷键

    ### C#电子书——快捷键知识点详解 #### 文件操作快捷键 **1. Ctrl+Shift+N:打开创建新项目对话框** - **介绍**:在Visual Studio 2005中,通过按下此快捷键可以迅速打开“创建新项目”对话框。这对于快速创建新...

    vi编辑器的使用

    - **vi的两种模式**:vi有两种主要的工作模式——指令模式和输入模式。在指令模式下,所有输入都会被视为命令;在输入模式下,输入的内容会被插入到文档中。 - **切换模式**:可以通过特定的命令(如`a`、`A`、`i`...

    Eclipse快捷键指南

    - **改写切换**:`Insert` —— 在插入模式和覆盖模式之间切换。 - **上滚行**:`Ctrl+↑` —— 上滚一行。 - **下滚行**:`Ctrl+↓` —— 下滚一行。 #### 七、文件管理类快捷键 **1. 文件操作** - **保存**:`...

    给WORD文档添加背景音乐时间

    - 在下拉菜单中选择“页眉和页脚”,此时文档会切换到页眉和页脚的编辑状态。 3. **插入Windows Media Player对象**: - 打开“插入”菜单,选择“对象”。 - 在弹出的对话框中,选择“新建”标签页下的“Windows...

    PLC6(ppt文档).ppt

    操作模式通过选择开关进行切换,LCD液晶显示屏用于显示编程、监视和运行时的信息,键盘区包括数字键、清除键、操作键和指令键,方便用户进行各种操作。 接下来,我们转向OMRON PLC的计算机辅助编程工具——CX-P。CX...

    C#设计模式大全

    这个问题用来比喻设计模式中的一个基本问题——是先定义接口还是先实现类。通常建议先定义接口,再实现类,这样可以更好地支持多态性和灵活性。 #### 大瓶子套小瓶子还是小瓶子套大瓶子? 这是对组合模式的一个...

    快捷键的使用f1——f10

    ### 快捷键的使用f1——f10 #### F1:获取帮助 - **功能**:在大多数软件程序中,按下F1键可以快速打开该程序的帮助文档或支持页面。 - **应用场景**:当你遇到操作上的问题时,可以通过F1键来查找相关的解决方法。...

    VC6.0插件——WndTabs

    WndTabs是一款针对Microsoft Visual C++ 6.0(简称VC6.0)开发环境的高效增强插件,它显著提升了代码编辑器的多文档界面(MDI)管理能力。这款插件在原有VC6.0的基础上增加了标签式界面,使得用户在处理多个源代码...

    Photoshop CS2教程——通道与蒙版.doc

    当在快速蒙版模式中工作时,“通道”调板中出现一个临时“快速蒙版”通道,其作用与将选取范围保存到通道中相同,当切换为标准模式后,快速蒙版就会马上消失,退出快速蒙版模式时,未被保护的区域就变成一个选区。...

    Linux——java环境部署

    ### Linux——Java环境部署 #### 一、概述 在Linux环境下进行Java开发环境的搭建是一项基础而重要的工作。本文档将详细介绍如何在Linux系统中安装并配置Java环境,包括JDK与Tomcat的安装配置过程,并附带一些常用...

    FPGA入门系列实验教程——液晶1602显示

    ### FPGA入门系列实验教程——液晶1602显示 #### 实验任务 本实验旨在通过在FPGA开发板上实现液晶1602显示“welcome to www.amy-studio.com”,帮助初学者熟悉并掌握以下内容: - 液晶1602显示屏的基本工作原理及其...

Global site tag (gtag.js) - Google Analytics