美文网首页
状态模式替代箭头型代码

状态模式替代箭头型代码

作者: MontyOak | 来源:发表于2017-07-30 10:27 被阅读24次

所谓“箭头型代码”是指大量嵌套条件导致的过深的程序层次,由于Python天然依赖缩进区分层级,所以最直接的体现就是一个缩进极夸张的语句块,导致屏幕宽度“不够用了”。

箭头型最大的毒害还不在于必须拖动横向滚动条才能检查代码(这点按照PEP8的处理方式完全可以避免),而在于过深的嵌套层次导致代码逻辑骤然复杂,看到最内层代码都不知道哪些条件下会执行这些语句,导致代码的可读性、可维护性降低。

这时引入状态模式来一定程度上替代“箭头型代码”就非常必要了。所谓状态模式是指当一个对象内在状态改变时允许改变其行为,但看起来对象本身像是改变了类。状态模式通过将一系列复杂的逻辑判断转移到不同状态的类中来简化逻辑判断。

简单来看个例子:

from state import curr, switch, stateful, State, behavior
@stateful
class Me(object):
    class WorkDay(State):
        default = True
        @behavior
        def daytime(self):
            print 'Work whole day!!!'
    class Weekend(State):
        @behavior
        def daytime(self):
            print 'Relax Sleep and Have fun!!!'

felix = Me()
while 1:
    for i in range(1, 8):
        if i==6:
            switch(felix, Me.Weekend)
        if i==1:
            switch(felix, Me.WorkDay)
        felix.day()

简单说明一下,被@stateful装饰器修饰的类的实例本身带有状态,可以通过curr()来查询,通过switch()来转换,而WorkDayWeekend所继承的State类带有__begin____end__状态转换协议(有点类似于上下文语句with)可以用来处理在状态进入/离开时的初始化/清理工作。

相关文章

  • 状态模式替代箭头型代码

    所谓“箭头型代码”是指大量嵌套条件导致的过深的程序层次,由于Python天然依赖缩进区分层级,所以最直接的体现就是...

  • 状态模式

    一、状态模式介绍 二、状态模式代码实例

  • 设计模式 第三周 博览网

    singleton 单件模式 示例代码 Flyweight 享元模式 实例代码 State 状态模式 原始代码 重...

  • 设计模式--状态模式

    目录 本文的结构如下: 引言 什么是状态模式 模式的结构 典型代码 代码示例 状态模式和策略模式的区别 优点和缺点...

  • 如何重构“箭头型”代码

    本文主要起因是,一次在微博上和朋友关于嵌套好几层的if-else语句的代码重构的讨论(微博原文),在微博上大家有各...

  • 设计模式-装饰模式

    装饰模式:动态的给对象扩展功能,提供了比继承更为弹性的替代方案。详情看代码

  • 使用 Kotlin 委托(Delegation) 实现 Andr

    委托模式(代理模式)是一种常见的设计模式,委托模式使得我们可以用聚合来替代继承,将委托者与实际实现代码分离出来,以...

  • 状态模式

    简介 状态模式允许一个对象在其状态改变时,改变它的行为,不同的状态可以做不同的事。 状态模式样例代码 特征...

  • 状态设计和场景切换

    状态设计模式,即某个角色有多种状态,需要在各个状态切换时,使用这种状态设计使代码更加灵活,简化了代码的判断逻辑,主...

  • 备忘录模式

    备忘录模式,其实就是备份模式,先保存原来的状态,再把状态恢复 新建测试类(代码说明看注释)

网友评论

      本文标题:状态模式替代箭头型代码

      本文链接:https://www.haomeiwen.com/subject/wuuhlxtx.html