• 设计模式之状态模式IFORNOIF(二十二)


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


    状态模式(state pattern)定义

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

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

    该类图中包含三个角色

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

    状态模式解决的问题

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

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

  • 相关阅读:
    uva 147 Dollars
    hdu 2069 Coin Change(完全背包)
    hdu 1708 Fibonacci String
    hdu 1568 Fibonacci
    hdu 1316 How Many Fibs?
    poj 1958 Strange Towers of Hanoi
    poj 3601Tower of Hanoi
    poj 3572 Hanoi Tower
    poj 1920 Towers of Hanoi
    筛选法——素数打表
  • 原文地址:https://www.cnblogs.com/denghailei/p/6846301.html
Copyright © 2020-2023  润新知