JAVA设计模式十二--State(状态模式)

状态模式(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 ) ;  
    } 
     
}

时间: 2024-11-06 20:21:32

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

设计模式 ( 十二 ) 职责链模式(Chain of Responsibility)(对象行为)

 设计模式(十二)职责链模式(Chain of Responsibility)(对象行为型) 1.概述 你去政府部门求人办事过吗?有时候你会遇到过官员踢球推责,你的问题在我这里能解决就解决.不能解决就推卸给另外个一个部门(对象).至于究竟谁来解决问题呢?政府部门就是为了能够避免屁民的请求与官员之间耦合在一起,让多个(部门)对象都有可能接收请求,将这些(部门)对象连接成一条链,而且沿着这条链传递请求.直到有(部门)对象处理它为止. 样例1:js的事件浮升机制 样例2: 2.问题 假设有多个对象都有

设计模式21:State 状态模式(行为型模式)

State 状态模式(行为型模式) 动机(Motivation) 在软件构建过程中,某些对象的状态如果改变,其行为也会随之而发生变化,比如文档处于只读状态,其支持的行为和读写状态的行为就可能完全不同. 如何在运行时根据对象的状态来透明地更改对象的行为?而不会为对象操作和状态转换之间引入紧耦合? 意图(Intent) 允许一个对象在其内部状态改变时改变它的行为.从而使对象看起来似乎修改了其行为.——<设计模式>GoF 结构(Structure) 示例代码 public enum Document

设计模式之十二:状态模式(State)

状态模式: 当一个对象的内部状态发生变化时允许改变它的行为. Allow an object to alter its behavior when its internal state changes. The object will appear to change its class. 状态模式将依赖于状态的行为分离成了各种状态类,每一种特定的转态类只处理单一的行为,并且定义了各种状态之间的转移变迁关系. UML图: 主要包括: Context:定义了客户端需要的接口,操作了一个当前状态类的

设计模式C++实现十二:状态模式

状态模式(state):当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类. 状态模式主要解决的是当控制一个对象状态转换的条件表达式国语复杂时的情况.把状态的判断逻辑转移到不同状态的一系列类中,可以把复杂的判断逻辑简化.例如本文的例子,只要我们把时间输入,就可以根据时间判断使用哪个状态,而不用我们在客户端来判断,客户端看到的只是很简单的代码,我们把复杂的逻辑判断转移到后台,而后台可以判断每个状态的下一个状态. 状态模式的好处是将与特定状态相关的行为局部化,并且将不同状态的行为

Java设计模式菜鸟系列(十三)状态模式建模与实现

转载请注明出处:http://blog.csdn.net/lhy_ycu/article/details/39829859 状态模式(State):允许对象在内部状态改变时改变它的行为,对象看起来好像修改了它的类.状态模式说白了就是一个对像有不同的状态,不同的状态对应不同的行为,它其实是对switch case这样的语句的拓展. 一.uml建模: 二.代码实现 /** * 示例:状态模式-- 一个对像有不同的状 态,不同的状态对应不同的行为 * * 下面四则运算为例 */ interface S

设计模式(十二)职责链模式(Chain of Responsibility)(对象行为型)

1.概述 你去政府部门求人办事过吗?有时候你会遇到过官员踢球推责,你的问题在我这里能解决就解决,不能解决就推卸给另外个一个部门(对象).至于到底谁来解决这个问题呢?政府部门就是为了可以避免屁民的请求与官员之间耦合在一起,让多个(部门)对象都有可能接收请求,将这些(部门)对象连接成一条链,并且沿着这条链传递请求,直到有(部门)对象处理它为止. 例子1:js的事件浮升机制 例子2: 2.问题 如果有多个对象都有可能接受请求,如何避免避免请求发送者与接收者耦合在一起呢? 3.解决方案 职责链模式(Ch

Java设计模式(二)——迭代模式

迭代模式的基本定义:对于一组对象集合(数组.堆栈.列表或散列),用户无需关心它的底层实现而能够通过调用统一接口遍历当中的所有元素.由于jdk已经对常见的迭代模式实现了封装,本文直接提供Collection和Iterator两个接口的模拟. 定义Iterator接口 /* * 设计迭代接口 */ public interface Iterator<E> { // 测试是否有下一个元素 boolean hasNext(); // 返回下一个元素 E next(); } Iterator.java

JAVA设计模式十--strategy(策略者模式)

概念策略模式定义了一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换.策略模式让算法独立于使用它的客户而独立变化.(原文:The Strategy Pattern defines a family of algorithms,encapsulates each one,and makesthem interchangeable. Strategy lets the algorithm vary independently from clients that use it.)Conte

Java 设计模式(十二) 依赖倒置原则(DIP)

依赖倒置原则(Dependence Inversion Principle) 依赖倒置原则(DIP)的基本概念 原始定义 高层模块不应该依赖低层模块,两者都应该依赖其抽象 抽象不应该依赖细节 细节应该依赖抽象 Java中的具体含义 模块间的依赖通过抽象发生 实现类之间不发生直接的依赖关系 其依赖关系通过接口或者抽象类产生 接口或抽象类不依赖于具体实现 实现类依赖接口或抽象类 依赖倒置(DIP)的好处 采用DIP可以减少类之间的耦合性,提高稳定性,降低并行开发带来的风险,提高代码的可读性和可维护性