• 状态模式


    解释:

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

    针对问题:

      对象状态的判断逻辑过于复杂,有很多的分支判断,形成long method。

    使用条件:

      1.当一个对象的行为取决于它的状态,且它必须在运行时刻根据状态改变它的行为,可以考虑状态模式。

      2.某项业务有多个状态,状态通常都是一些枚举变量,状态的白话都是依靠大量的多分支判断语句来实现的。

    原理:

      控制一个对象状态转换的条件表达式过于复杂时,把状态的判断逻辑转义到表示不同状态的一系列类当中,从而把复杂的判断逻辑简化。

    结构图:

      

      

      

      客户端

      

    优点:

      将于特定状态相关的行为局部化,并将不同状态的行为分割开来。修改状态容易。

      将特定状态相关的行为都放入一个对象中,由于所有与状态相关的代码都中存在与一个ConcreteState中,定义新的子类可以很容易地增加新的状态和转换。添加状态容易。

      目的:消除庞大的条件分支语句,易于修改、扩展。大的分支判断会使得难以修改、扩展。状态模式通过把各种状态转移逻辑分布到State的子类之间,来减少相互间的依赖。(例,活字印刷)

    示例:

      

      

      

      客户端:

      

      对比未使用状态模式的代码:

      

      

      客户端:

       

      

       

    扩展:

      面向对象设计:就是希望做到代码的责任分解。

      long method:

      代码坏味道之一。如果方法过长其实极有可能是有坏问道了。

      如果方法很长,且有很多的分支判断,则意味着它的责任过大了。无论是任何状态都需要通过它来改变,是很糟糕的。违背了“单一职责原则”。

      需求改动、增加时,需要对方法做改动,维护出错风险大。违背了“开放-封闭原则”。

        

  • 相关阅读:
    核心编程笔记8——用户模式下的线程同步
    核心编程随笔7——线程调度和优先级
    深入浅出mfc随笔——MFc程序的生死因果
    opengl
    核心编程6——线程
    深入浅出mfc学习笔记——六大关键技术之仿真_运行时和动态创建
    深入浅出mfc学习笔记——六大关键技术仿真_Persistence(永久保存)
    Gdi+编程
    深入浅出mfc学习笔记1
    file open等待事件
  • 原文地址:https://www.cnblogs.com/panpanwelcome/p/5586298.html
Copyright © 2020-2023  润新知