zoukankan      html  css  js  c++  java
  • state

      state模式出发点在于类似于if else和switch case这样的分支语句,当分支语句条件数目比较庞大时,看懂或者维护这样的代码很困难。例如,山东项目需求的数据对比功能,简单深度5的三叉树结构,用if语句去实现,就要用的近150行代码(起初是用逻辑表达式将每个节点的前置条件算出,这样减少了if的次数,但是代码可读性变差)。
    如果在三叉树内部任意加入一个节点,效果会如何?任何和该节点关联的path都要修改,造成代码维护的困难。
      state模式关注与状态之间的转换,其设计思路是为所有状态抽象出一个类,里面暴露了所有状态的行为接口。每个状态都有一个具体类。然后设置一个Context类,用来给用户提供服务,这点和Strategy模式一致。不同之处在于,context传递了自身的指针给State类,用户进行的行为操作,转由State类去判断和执行(调用子类的操作)。这样,用户只需要在context下达命令,具体的判断和操作转由state去判断和执行(用户只关心状态转换是否成功,并不关心状态时怎么转换的)。当维护状态关系时,只需要修改各concreteState即可。
    state模式的类图如下所示:




  • 相关阅读:
    linux磁盘挂载
    3个方法解决百度网盘限速 (2018-07-20)
    mysql状态分析之show global status
    Cgroups子系统介绍
    Go语言 关键字:defer
    Go语言 map的实现
    Go语言 基本类型
    MySQL 监控指标
    sshpass的使用方法
    C++11 std::ref使用场景
  • 原文地址:https://www.cnblogs.com/hgwang/p/5872101.html
Copyright © 2011-2022 走看看