zoukankan      html  css  js  c++  java
  • 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");
        }
    }
  • 相关阅读:
    关于Lua中的面向对象实现
    当我读《体验引擎:游戏设计全景探秘》时我在想什么
    【Unity】拖动图片生成对应Image
    【Unity】阅读LuaFramework_UGUI的一种方法
    【Unity】关于VS条件编译符号
    Lua元表应用举例:配置表格转为Lua配置表
    对文件夹下的git项目进行批量更新、打包
    二分查找
    python-变量及字符串赋值|今日所学-2017-12-26
    lamda- filter,map, collect
  • 原文地址:https://www.cnblogs.com/wanxi/p/6476229.html
Copyright © 2011-2022 走看看