状态模式(State Pattern)是设计模式的一种,属于行为模式。
  定义(源于Design Pattern):当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类。
  状态模式主要解决的是当控制一个对象状态的条件表达式过于复杂时的情况。把状态的判断逻辑转移到表示不同状态
的一系列类中,可以把复杂的判断逻辑简化。
意图:
允许一个对象在其内部状态改变时改变它的行为
适用场景:
  1.一个对象的行为取决于它的状态,并且它必须在运行时刻根据状态改变它的行为。
  2.一个操作中含有庞大的多分支结构,并且这些分支决定于对象的状态。
如图:

举例说明:
[java]
package design.state; 
/**
 * 文件名称:design.state.Step.java
 * 说明:枚举,说明有几个状态
 * */ 
public enum Step { 
    /**
     * 模拟审核的状态, 未审核  审核中  通过审核  未通过审核
     * */ 
    UNAUDITED , AUDIT , PASS , NOT_PASS 
}  
 
 
 
 
package design.state; 
 
/**
 * 文件名称:design.state.Examine.java 
 * 说明:判断逻辑
 */ 
public class Examine { 
    private Step step; 
 
    public Examine() { 
        step = Step.UNAUDITED ;  
    } 
 
    public void push(int status) { 
        switch (status) { 
        case 1: 
            if(step == Step.UNAUDITED){ 
                step = Step.AUDIT ; 
            }else if(step == Step.AUDIT ){ 
                step = Step.PASS ; 
            }else if(step == Step.NOT_PASS){ 
                System.out.println( "审核已经被否决" ); 
            }else if(step == Step.PASS){ 
                System.out.println( "审核已经通过" ); 
            } 
            break ; 
        case 0:  
            step = Step.NOT_PASS ;  
            break ; 
        } 
    } 

 
 
 
 
 
package design.state; 
 
 
/**
 * 文件名称:design.state.Main.java
 * 说明:测试方法
 * */ 
public class Main { 
 
    /**
     * @param args
     */ 
    public static void main(String[] args) { 
        Examine examine = new Examine() ; 
        examine.push( 1 ) ; 
        examine.push( 0 ) ; 
        examine.push( 1 ) ;  
    } 
     
}

JAVA设计模式--State(状态模式)的更多相关文章

  1. 折腾Java设计模式之状态模式

    原文地址 折腾Java设计模式之状态模式 状态模式 在状态模式(State Pattern)中,类的行为是基于它的状态改变的.这种类型的设计模式属于行为型模式.在状态模式中,我们创建表示各种状态的对象 ...

  2. java设计模式之状态模式

    状态模式 允许一个对象在其内部状态改变时改变它的行为,对象看起来似乎修改了它的类. 状态模式UML图 上下文环境(Context):它定义了客户程序需要的接口并维护一个具体状态角色的实例,将与状态相关 ...

  3. C++设计模式-State状态模式

    State状态模式作用:当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类. UML图如下: State类,抽象状态类,定义一个接口以封装与Context的一个特定状态相关的行为. ...

  4. 程序设计模式 —— State 状态模式

    我应该如何阅读? 本文将使用优雅的文字风格来告诉你什么是状态模式. 注意: 1.在阅读本文之前请保证你已经掌控了 面对对象的思想与 多态的基本概念,否则将难以理解. 2.本文实现将用C++实现,你不一 ...

  5. JAVA设计模式:状态模式

    声明:转载请说明来源:http://www.cnblogs.com/pony1223/p/7518226.html 一.引出状态模式 假设我们现在有一个糖果机项目,那么我们知道正常一般糖果机提供给用户 ...

  6. [C++设计模式] state 状态模式

    <head first 设计模式>中的样例非常不错,想制造一个自己主动交易的糖果机,糖果机有四个状态:投入钱不足,投入钱足够,出售糖果,糖果售罄. 糖果机的当前状态处于当中不同的状态时,它 ...

  7. Java设计模式之状态模式详解

    (本文由言念小文原创,转载请注明出处) 在实际工作中经常遇到某个对象,处于不同的状态有不同行为逻辑.且状态之间可以相互迁移的业务场景,特别是在开发通信协议栈类软件中尤为多见.<设计模式之禅> ...

  8. 曾侯乙编钟引发的遐想之Java设计模式:状态模式

    目录 示例 简单例子 改进代码 状态模式 定义 意图 主要解决问题 何时使用 优缺点 曾侯乙编钟 状态模式-命令模式-策略模式 示例 一个类对外提供了多个行为,同时该类对象有多种状态,不同状态下对外的 ...

  9. 【转】设计模式 ( 十七) 状态模式State(对象行为型)

    设计模式 ( 十七) 状态模式State(对象行为型) 1.概述 在软件开发过程中,应用程序可能会根据不同的情况作出不同的处理.最直接的解决方案是将这些所有可能发生的情况全都考虑到.然后使用if... ...

随机推荐

  1. CLR如何调用虚方法、属性和事件

    方法代表在类型或类型的实例上执行某些操作的代码.在类型上执行操作,称为静态方法:在类型的实例上执行操作,称为非静态方法.任何方法都有一个名称.一个签名和一个返回值(可以是void). CLR允许一个类 ...

  2. [C语言](二)01 获取Windows图形构件大小信息

    SYSMETS.c #include <windows.h> #include "SYSMETS.H"//自定义的单元,所以用"",不是用<& ...

  3. RESTful Api 身份认证中的安全性设计探讨

    REST 是一种软件架构风格.RESTful Api 是基于 HTTP 协议的 Api,是无状态传输.它的核心是将所有的 Api 都理解为一个网络资源.将所有的客户端和服务器的状态转移(动作)封装到 ...

  4. Liferay中SQL打印参数

      XX\tomcat-7.0.42\webapps\ROOT\WEB-INF\classes\log4j.properties log4j.rootLogger=INFO, CONSOLE log4 ...

  5. linux下安装nginx、pcre、zlib、openssl

    1.安装nginx之前需要安装PCRE库的安装  最新下载地址   ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/ tar –zxvf p ...

  6. 浅谈Dynamic 关键字系列之一:dynamic 就是Object(转)

    C# 4.0提供了一个dynamic 关键字,那么什么是dynamic,究竟dynamic是如何工作的呢? 从最简单的示例开始: static void Main(string[] args) { d ...

  7. oracle 11g 服务端下载地址及安装说明

        oracle 11g 服务端下载地址及安装说明         分类:             Oracle              2013-11-17 19:40     988人阅读  ...

  8. [POJ 1787]Charlie's Change (动态规划)

    题目链接:http://poj.org/problem?id=1787 题意:有4种货币分别是1元,5元,10元,20元.现在告诉你这四种货币分别有多少个,问你正好凑出P元钱最多可以用多少货币.每种货 ...

  9. 黑马程序员_JAVA基础知识总结2

    ------- android培训.java培训.期待与您交流! ---------- IDE ---> Itegrity Development Environment Java EE --- ...

  10. CODESOFT 2015中的二维码该怎样生成

    由于二维条码具有储存量大.保密性高.追踪性高.抗损性强.备援性大.成本便宜等特性,其应用 渐趋广泛,因此二维码的制作对于CODESOFT条码设计软件的用户来讲可谓司空见惯.我们最常见的二维码要数QR码 ...