zoukankan      html  css  js  c++  java
  • 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 ) ;  
        } 
         

  • 相关阅读:
    远程连接ORACLE服务的设置方法
    错误:ORA28002: the password will expire within 7 days 解决方法
    SQL Server、Oracle、Mysql查询前n条记录
    oracle登录错误:ORA28000: the account is locked 解决方法
    学习oracle中的PCTFREE和PCTUSED
    错误“ORA12520: TNS: 监听程序无法找到需要的服务器类型的可用句柄”解决方法
    windows计划任务+批处理文件实现oracle数据库的定时备份与恢复
    Address already in use: JVM_Bind(端口冲突)
    ORACLE VARCHAR 排序问题
    从百度空间到CSDN——博客搬家源码
  • 原文地址:https://www.cnblogs.com/lhfyy/p/4064979.html
Copyright © 2011-2022 走看看