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服务器时间同步
    07_DICTIONARY_ACCESSIBILITY
    Oracle监听静态注册和动态注册
    Oracle安装基本步骤
    笔试面试(2)阿里巴巴2014秋季校园招聘-软件研发工程师笔试题详解
    Global and Local Coordinate Systems
    齐次坐标(Homogeneous Coordinates)
    朴素贝叶斯分类器的应用
    图像数据到网格数据-1——MarchingCubes算法
    PCL源码剖析之MarchingCubes算法
  • 原文地址:https://www.cnblogs.com/liaoweipeng/p/5791040.html
Copyright © 2011-2022 走看看