• Java设计模式之行为型模式(状态模式)


    状态模式(State)

    1、概述

    ①定义

    状态模式允许一个对象在其内部状态改变时改变它的行为。对象看起来似乎修改了它的类。

    ②适用场景

    • 一个对象的行为取决于它的状态,并且它必须在运行时刻根据状态改变它的行为。
    • 一个操作中含有庞大的多分支结构,并且这些分支决定于对象的状态。

    ③结构

    • State类为状态类,用来存储一些状态信息。
    • Context类为上下文类,用来存储State。
    • React类为反应器,根据Context中state属性的变化而作出相对应的反应。

    UML图:

    这里写图片描述

    2、实例

    代码已经上了注释,很简单,大家领会一下状态模式的思想。

    /**
     * @author Hanlin Wang
     */
    
    public class StateMode {
        public static void main(String[] args) {
            Context.setState(new State("state1"));
    
            Context.Handler(); 
    
            Context.setState(new State("state2"));
    
            Context.Handler();
    
            //运行结果
            //State 1 mode is running
            //State 2 mode is running
        }
    }
    
    //定义状态类
    class State{
        private String value;
    
        public State(String value){
            this.value = value;
        }
    
        public String getValue() {
            return value;
        }
    
        public void setValue(String value) {
            this.value = value;
        }
    }
    
    //定义上下文类,监视State类的变化
    class Context{
        //注入State
        private static State state;
    
        public static State getState() {
            return state;
        }
    
        public static void setState(State state) {
            Context.state = state;
        }
    
        public static void Handler(){
            String value = state.getValue();
            switch (value) {
            case "state1":
                React.monitor();
                break;
            case "state2":
                React.monitor2();
                break;
            default:
                System.out.println("unknown");
                break;
            }
        }
    }
    
    //定义事件处理类
    class React{
        public static void monitor(){
            System.out.println("State 1 mode is running");
        }
        public static void monitor2(){
            System.out.println("State 2 mode is running");
        }
    }
  • 相关阅读:
    Request源码总结
    jmeter并发顺序问题
    mysql函数应用
    读《飘》之后的感受
    itchat源码阅读一
    python将print的内容输出到txt文件
    说一下StoreBoard和纯代码编程各有什么好处吧
    CocoaPods 安装
    Silverlight调用WebSite类型的WebService,Debug时的跨域问题
    ComboBox的奇怪属性
  • 原文地址:https://www.cnblogs.com/wanxi/p/6476229.html
Copyright © 2020-2023  润新知