zoukankan      html  css  js  c++  java
  • 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的子类之间,来减少相互间的依赖。

  • 相关阅读:
    转 linux设备模型(4)
    SQL convert
    SQL 中的 case when
    自己写的文本文件加密器
    [A3] 2D Airfoil Aerodynamic Analysis With Fluent & Gambit
    [A2]更快的使用你的键盘:AutoHotkey
    [A4]更快的使用你的键盘:AutoHotkey(2)
    开篇HOG提取训练检测+样本制作
    Flash调用Lua脚本: 五
    Sql Server全局变量 【转载】
  • 原文地址:https://www.cnblogs.com/liaoweipeng/p/5791040.html
Copyright © 2011-2022 走看看