zoukankan      html  css  js  c++  java
  • 行为模式

    类的行为基于它自身的状态改变,对象在内部状态发生改变时改变它的行为,对象看起来好像修改了它的类。
     
    对象的行为依赖于他的状态,并且可以根据状态的改变而改变行为。
     
    使用目的:
    (1)需要抽象状态
        当代码中包含了大量与对象状态有关的语句时,就可以考虑用状态模式,状态可以在多个类间共享,影响多个类的行为。
    (2)状态是有时间范围的
    策略和命令都是瞬时的操作,不具有时间跨越性
     
     
    好处:状态模式封装了状态转换逻辑,枚举了可能的状态,将所有与某个状态有关的逻辑放到了一个状态类里,状态扩展方便
     
    坏处:状态模式对“开闭原则”的支持并不太好,对于可以切换状态的状态模式,增加新的状态类需要修改那些负责状态转换的源代码,否则无法切换到新增状态;而且修改某个状态类的行为也需修改对应类的源代码。
     

     

    https://www.jianshu.com/p/378ed95e7f0d

     
    这篇讲的很好
     
    状态模式的角色:
    • state状态
      表示状态,定义了根据不同状态进行不同处理的接口,该接口是那些处理内容依赖于状态的方法集合,对应实例的state类
    • 具体的状态
      实现了state接口,对应daystate和nightstate
    • context
      context持有当前状态的具体状态的实例,此外,他还定义了供外部调用者使用的状态模式的接口。
     
     
    作者:六尺帐篷
    來源:简书
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
     
     
    实际上在做金融二次加解密的时候,对于密钥替换,就可以用状态模式来做
     
     
    简单状态模式与可切换状态的状态模式
    1. 简单状态模式:简单状态模式是指状态都相互独立,状态之间无须进行转换的状态模式,这是最简单的一种状态模式。对于这种状态模式,每个状态类都封装与状态相关的操作,而无须关心状态的切换,可以在客户端直接实例化状态类,然后将状态对象设置到环境类中。如果是这种简单的状态模式,它遵循“开闭原则”,在客户端可以针对抽象状态类进行编程,而将具体状态类写到配置文件中,同时增加新的状态类对原有系统也不造成任何影响。
    2. 可切换状态的状态模式:大多数的状态模式都是可以切换状态的状态模式,在实现状态切换时,在具体状态类内部需要调用环境类Context的setState()方法进行状态的转换操作,在具体状态类中可以调用到环境类的方法,因此状态类与环境类之间通常还存在关联关系或者依赖关系。通过在状态类中引用环境类的对象来回调环境类的setState()方法实现状态的切换。在这种可以切换状态的状态模式中,增加新的状态类可能需要修改其他某些状态类甚至环境类的源代码,否则系统无法切换到新增状态。
  • 相关阅读:
    Linux网络编程必看书籍推荐
    SpringMVC DispatcherServlet初始化过程
    freemarker写select组件(五)
    hdu 1009 FatMouse' Trade
    新IOS编程语言 Swift 新编译器Xcode6
    NoSQL数据库:数据的一致性
    POJ 3041 Asteroids
    POJ 3342 Party at Hali-Bula (树形dp 树的最大独立集 判多解 好题)
    __repr__与__str__
    HDU 4950 Monster(公式)
  • 原文地址:https://www.cnblogs.com/43726581Gavin/p/9048476.html
Copyright © 2011-2022 走看看