zoukankan      html  css  js  c++  java
  • 设计模式-状态模式

    状态模式 参考

      状态模式,又称状态对象模式(Pattern of Objects for States),状态模式是对象的行为模式。状态模式允许一个对象在其内部状态改变的时候改变其行为。这个对象看上去就像是改变了它的类一样。

    状态模式的结构

       用一句话来表述,状态模式把所研究的对象的行为包装在不同的状态对象里,每一个状态对象都属于一个抽象状态类的一个子类。状态模式的意图是让一个对象在其内部状态改变的时候,其行为也随之改变。状态模式的示意性类图如下所示:

      状态模式所涉及到的角色有:

    •  环境(Context)角色,也成上下文:定义客户端所感兴趣的接口,并且保留一个具体状态类的实例。这个具体状态类的实例给出此环境对象的现有状态。
    • 抽象状态(State)角色:定义一个接口,用以封装环境(Context)对象的一个特定的状态所对应的行为。
    • 具体状态(ConcreteState)角色:每一个具体状态类都实现了环境(Context)的一个状态所对应的行为。
    /**
     * 状态模式
     * 抽象状态类
     * */
    interface State {
        //状态对应的处理
        fun handle(para: String)
    }
    /**
     * 状态模式
     * 上下文角色
     * */
    class Context {
        //持有一个State类型的对象
        private var state: State? = null
    
        fun setState(state: State) {
            this.state = state
        }
    
        //用户感兴趣的接口方法
        fun request(para: String) {
            //转调state来处理
            this.state!!.handle(para)
        }
    }
    /**
     * 具体状态关现类
     * */
    class ConcreteStateA : State {
        override fun handle(para: String) {
            println("ConcreteStateA handle: $para")
        }
    }
    class ConcreteStateB : State {
        override fun handle(para: String) {
            println("ConcreteStateB handle: $para")
        }
    }

    测试

    class Main {
        companion object {
            @JvmStatic
            fun main(args: Array<String>) {
                //创建状态
                val state = ConcreteStateA()
                //创建环境
                val context = Context()
                //set the state into context
                context.setState(state)
                context.request("test")
            }
        }
    }
  • 相关阅读:
    【转】Java并发编程:阻塞队列
    【计算机二级Java语言】卷005
    【计算机二级Java语言】卷004
    【计算机二级Java语言】卷003
    【计算机二级Java语言】卷002
    【计算机二级Java语言】卷001
    【计算机二级C语言】卷020
    【计算机二级C语言】卷019
    【计算机二级C语言】卷017
    【计算机二级C语言】卷016
  • 原文地址:https://www.cnblogs.com/johnnyzhao/p/11042832.html
Copyright © 2011-2022 走看看