zoukankan      html  css  js  c++  java
  • 设计模式之状态模式IFORNOIF(二十二)

    今天大风大雨, 但心情还行, 继续撸DOTA


    状态模式(state pattern)定义

    当一个对象的内在状态改变时允许改变其行为, 这个对象看起来像是改变了其类

    这在我们开发的业务中太常见了, 角色权限的管理, 给予不同的权限, 不同角色的操作就会发生改变

    该类图中包含三个角色

    • Context: 包含状态的对象, 根据这些状态进行响应
    • State: 状态接口, 定义状态
    • ConreteState: 具体的状态, 并且实施对应状态的行为

    状态模式解决的问题

    • 当控制一个对象状态的条件表达式过于复杂时的情况. 把状态的判断逻辑转移到表示不同状态的一系列类中, 可以把复杂的判断逻辑简化
    • 提到状态 我们的代码中可能有各种 状态的判断使用的是if else 要是只是少量没必要使用状态模式, 但是要是很多呢, 那就使用状态模式吧
    • 使用多态代替了条件的判断, 这样我们代码的扩展性更加的强, 要加一些状态, 可以直接创建
    • 状态是可以被共享的, 在世纪的开发中我们会经常定义一些CommontStatus类, 表示的一些常量
    • 状态被管理者, 我们只需要关注一个固定的状态到其他状态的转换
    • 安全, 如上, 我们设置状态时, 必须是接口的实现类, 而不是一些整数, 这样可以杜绝魔数(莫名其妙的数字, 比如status == 1 哈哈)

    总结: 状态模式适用某一个对象的行为取决于该对象的状态, 并且该对象的状态在运行时的转换, 又或者有很多的判断, 而这些判断只是因为某个不同而不断的切换(该判断下的对象的实现复杂的情况下)

  • 相关阅读:
    兼容ie10及以上css3加载进度动画
    MySQL的安装
    VSFTPD+MYSQL+PAM
    58.省市联动-json
    省市联动
    56.检验特殊字符
    55.全选2
    54.截取字符串的思想实现输入框字数限制
    网络截取文件名
    lastPathComponent的功能
  • 原文地址:https://www.cnblogs.com/denghailei/p/6846301.html
Copyright © 2011-2022 走看看