状态模式(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. 加密--win7下安装openssl

    http://www.cnblogs.com/ZhouL3777/archive/2012/10/21/2732890.html http://www.cnblogs.com/ZhouL3777/ar ...

  2. Java多线程之新类库中的构件DelayQueue

    DelayQueue 是一个无界的BlockingQueue,用于放置实现了Delayed接口的对象,其中的对象只能在其到期时才能从队列中取走.这种队列是有序的,即队头对象的延迟到期时间最长.注意:不 ...

  3. Java多线程之线程中断

    该例子说明,Sleep可以被中断,但是I/O和synchronized不能被中断. package Thread.Interrupting; import java.io.IOException; i ...

  4. 论职务犯罪案件侦查 z

    1996年3月17日八届人大四次会议修订的<刑事诉讼法>第96条    第一款中有规定:犯罪嫌疑人在被侦查机关第—次讯问后或者采取强制措施之日起,可以聘请律师为其提供法律咨询.代理申诉.控 ...

  5. $.ajax获取不到数据问题解决

    $("#updateflow").click(function () { $.ajaxSetup({ contentType: "application/json;cha ...

  6. MySQL处理数据库和表的常用命令

    MySQL处理数据库和表的常用命令 [导读] 学习如何管理和导航MySQL数据库和表是要掌握的首要任务之一,下面的内容将主要对MySQL的数据库和表的一些常用命令进行总结,一些我们不得不掌握的命令,一 ...

  7. MongoDB Tool

    robomongo MongoBooster: [推薦]MongoChef:http://3t.io/mongochef/download/ MongoVUE 是个比较好用的MongoDB客户端,不过 ...

  8. substring与substr

    一.substring package Test; public class SubstringTest { public static void main(String[] args) { Stri ...

  9. HTML5的动画学习历程

    一.三角学原理. function getRadio(d){//根据角度获得弧度,                return d*Math.PI/180;                }, fun ...

  10. C#下的Redis 学习

    Redis作为世界上最快的分布式NoSQL的数据存储,在高性能构架中离不开他的身影 Centos下安装Redis wget http://download.redis.io/redis-stable. ...