一、概述

  概念

  

  再引用网友的说通俗一点:

  State模式在实际使用中比较多,适合"状态的切换"。因为我们经常会使用If elseif else 进行状态切换, 如果针对状态的这样判断切换反复出现,我们就要联想到是否可以采取State模式了。

不只是根据状态,也有根据属性。如果某个对象的属性不同,对象的行为就不一样,这点在数据库系统中出现频率比较高,我们经常会在一个数据表的尾部,加上property属性含义的字段,用以标识记录中一些特殊性质的记录,这种属性的改变(切换)又是随时可能发生的,就有可能要使用State。

  一些类似旋转开关(从1切换到2,再切换3...)的时候,应该想到状态模式了!

  UML简图

  

  角色

  抽象状态角色:定义接口,封装环境对象特定状态对应的行为

  具体状态角色:实现环境状态对应的行为

  环境角色:定义客户端感兴趣的接口,保留具体状态类的实例

二、实践

  把上面的UML简图给出示意性代码

  抽象状态

/**
* 抽象状态接口
*
* @author Administrator
**/
public interface State {
void operation();
}

  具体状态(实际会有多个,这里给出一个示意性的)

/**
* 具体状态角色
*
* @author Administrator
**/
public class ConcreteState implements State{
@Override
public void operation() {
// 具体逻辑
}
}

  环境角色

/**
* 环境角色
*
* @author Administrator
**/
public class Context {
private State state; public void setState(State state) {
this.state = state;
}
public void operation() {
state.operation();
}
}

  这里需要再次指出,模式对应的是状态的“旋转改变”——比如电梯开门,下一个状态应该是电梯关门,电梯关门,下一个状态应该是电梯上下行,

在之前,我们可以通过if..else来强制实现,但会显得逻辑混乱,难以维护!

  一个完整的案例分析,请参见:http://blog.csdn.net/taozi8023/article/details/51456769

三、改进与思考

  一个通过客户端切换状态的简单实例参见:http://ifeve.com/state-design-pattern-in-java-example-tutorial/

  由浅入深,强力推荐http://blog.csdn.net/u012401711/article/details/52675873

最新文章

  1. 在MVC控制器里面使用dynamic和ExpandoObject,实现数据转义的输出
  2. Java this关键字
  3. Laravel 流程分析——应用程序初始化
  4. chmod 无法修改磁盘文件的权限解释 (光盘文件就是只读的,修改不了的)
  5. 帝国cms常用变量总结
  6. jquery实现跨域提交(原创)
  7. jquery方法回到顶部代码
  8. 172. Factorial Trailing Zeroes
  9. UGUI 锚点
  10. js 模板引擎 jade使用语法
  11. ADO.NET学习(一)
  12. spark2.4 分布式安装
  13. VMare Workstation 安装Ubuntu 虚拟机教程
  14. 使用Scratch进行少儿编程
  15. RabbitMQ AMQP (高级消息队列协议)
  16. tf tensor 输出
  17. ASP.NET Web API - 使用 Castle Windsor 依赖注入
  18. Storm元数据交互详解
  19. 手机端GPS定位结合百度地图实现定位
  20. android Random的使用

热门文章

  1. 360网站卫士SQL注入绕过案例一个
  2. [零基础学JAVA]Java SE基础部分-03.标识符、数据类型,数组,方法
  3. IO流输入输出流,字符字节流
  4. HTML5 classList API
  5. 交叉熵Cross-Entropy
  6. PHP中将字符串转化为整数(int) intval() printf()
  7. ssm框架基本流程
  8. STM32 Cortex-M3 NMI异常
  9. ARM Linux 内核 panic 之cache 一致性 ——cci-400 cache一致互联
  10. Android 中Dialog的使用