zoukankan      html  css  js  c++  java
  • 大战设计模式【14】—— 状态模式

    状态模式(state)

    设计模式使用的例子https://github.com/LinkinStars/DesignPatternsAllExample

    一、定义

    允许对象在内部状态改变时改变它的行为,对象看起来好像修改了它的类。

     

    二、结构

    Context(环境类):定义客户感兴趣的接口。维护一个ConcreteState子类的实例,这个实例定义当前状态;

    State(抽象状态类):定义一个接口以封装与Context的一个特定状态相关的行为;

    ConcreteState(具体状态类):每一子类实现一个与Context的一个状态相关的行为;

    三、优点

    让状态的变化有序,且保证在新增状态或者行为的情况下不会出现有遗漏的情况

    封装寄语状态的行为,并将行为委托到当前的状态

    四、缺点

    状态过多会导致类的数量过多

    五、应用场景

    一个事物有多个状态,切状态之间存在互相转变的关系的时候可以使用

    需要讲事物的行为进行封装,不是暴露在方法中被看见,而是在状态内部实现的时候

    有多个行为会导致事物状态改变的时候

    六、个人总结

    1、状态模式主要是为了处理多个状态变化的情况。

    当我们遇到多个状态之间互相变化的时候,如果状态过多我们经常会遗漏从一种状态变化成另一种状态的情况。

    状态模式通过接口的特性从而避免了这样的情况发生。

    2、事物的所有行为都在每个状态中存在,从而状态本生只需要考虑当前状态所发生的变化和变化的结果。

    在例子中,简单的说,不使用状态模式的时候,我们是面向行为去编程,而是用状态模式的时候,我们是面向状态去编程。

    3、状态模式的实现不一定要使用接口,也可以使用抽象类,但是要明确的是,当你有些需要默认行为改变的时候才去使用。

  • 相关阅读:
    Best Time to Buy and Sell Stock
    Remove Nth Node From End of List
    Unique Paths
    Swap Nodes in Pairs
    Convert Sorted Array to Binary Search Tree
    Populating Next Right Pointers in Each Node
    Maximum Subarray
    Climbing Stairs
    Unique Binary Search Trees
    Remove Duplicates from Sorted Array
  • 原文地址:https://www.cnblogs.com/linkstar/p/7767475.html
Copyright © 2011-2022 走看看