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");
        }
    }
  • 相关阅读:
    9ch
    thymeleaf 的使用(三)--举例使用
    thymeleaf 的使用(二)--基本语法
    thymeleaf 的使用(一)--导入和基本操作
    SpringBoot对静态资源的映射规则
    第一个Spring Boot项目
    HTML文本换行问题
    判断for(var i=0;i<=3;i++){ setTimeout(function() { console.log(i) }, 10) }
    js的执行机制——宏任务和微任务
    v-if 和 v-show 的区别
  • 原文地址:https://www.cnblogs.com/wanxi/p/6476229.html
Copyright © 2011-2022 走看看