• java设计模式之状态模式


    状态模式

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

    状态模式UML图

      上下文环境(Context):它定义了客户程序需要的接口并维护一个具体状态角色的实例,将与状态相关的操作委托给当前的Concrete State对象来处理。

      抽象状态(State):定义一个接口以封装使用上下文环境的的一个特定状态相关的行为。

      具体状态(Concrete State):实现抽象状态定义的接口。

    状态模式代码

    package com.roc.state;
    
    public class Context {
    
        private State state;
        
        public Context(State state){
            this.state=state;
        }
    
        public State getState() {
            return state;
        }
    
        public void setState(State state) {
            this.state = state;
        }
        
        public void stateChange(){
            state.action(this);
        }
        
    }
    package com.roc.state;
    /**
     * 抽象状态类
     * @author liaowp
     *
     */
    public abstract class State {
        public abstract void action(Context context);
    }
    package com.roc.state;
    
    public class OpenSate extends State{
    
        public void action(Context context) {
            System.out.println("开");
            context.setState(new CloseState());
        }
    
    }
    package com.roc.state;
    
    public class CloseState extends State{
    
        public void action(Context context) {
            System.out.println("关");
            context.setState(new OpenSate());
        }
    
    }
    package com.roc.state;
    /**
     * 状态模式
     * @author liaowp
     *
     */
    public class Client {
        public static void main(String[] args) {
            Context context=new Context(new CloseState());
            context.stateChange();
            context.stateChange();
            context.stateChange();
            context.stateChange();
            context.stateChange();
            context.stateChange();
            context.stateChange();
            context.stateChange();
        }
    }

    状态模式适用场景

       状态模式将与特定状态相关的行为局部化,并且将不同状态的行为分割开来。

       所有状态相关的代码都存在于某个ConcereteState中,所以通过定义新的子类很容易地增加新的状态和转换。

       状态模式通过把各种状态转移逻辑分不到State的子类之间,来减少相互间的依赖。

  • 相关阅读:
    springcloud 微服务 分布式 Activiti6 工作流 vue.js html 跨域 前后分离
    java 整合redis缓存 SSM 后台框架 rest接口 shiro druid maven bootstrap html5
    继承
    封装
    对象的生命周期
    类与对象
    如何理解类?
    面向过程
    jdk1.8新特性
    git使用指南
  • 原文地址:https://www.cnblogs.com/liaoweipeng/p/5791040.html
Copyright © 2020-2023  润新知