• 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 ) ;  
        } 
         

  • 相关阅读:
    配置samba
    extern c
    剑指offer 孩子们的游戏
    剑指offer 扑克牌顺子
    剑指offer 翻转单词顺序列
    剑指offer 左旋转字符串
    mysql查看或显示当前存在多少数据库
    vim替换
    平衡二叉树
    将employees表的所有员工的last_name和first_name拼接起来作为Name,中间以一个空格区分
  • 原文地址:https://www.cnblogs.com/lhfyy/p/4064979.html
Copyright © 2020-2023  润新知