zoukankan      html  css  js  c++  java
  • WF本质论 读书心得 1 剖析WF (下)

    复合语句组件

    接下来要做的是把OpenSesame分成若干小单元
    第一次分割,将Read从OpenSesame中分离出来
    OpenSesame中,调用了Read
    这里的关键是,如何在Read完成执行后,通知调用者OpenSesame。
    处理方法:在Read的Start/Run方法中使用一个书签,从而暂停了程序;Read执行完毕,最后一步恢复书签,通知了书签管理器BookmarkManager,激活了调用者OpenSesame的异步方法ContinueAt,使之得到了通知。

    第二次分割,将剩余的OpenSesame割分为PrintKey和PrintGreeting
    *注:每个活动的mgr都是属于自己本身的,之间没有联系
    为此,建立活动的集合类ProgramStatementBlock:ProgramStatement,注意Run方法与ContinueAt方法的配合,使用了迭代技术; 以及通过runtime.RunProgram()方法,间接调用programStatement.Run(mgr)

    最后,作一点小修改。注意到,ProgramStatementBlock仅仅是一个像{}样子的顺序流,此外还有其他的控制流(if,switch,for,while,foreach)——统称为复合语句组件,于是我们建立CompositeProgramStatement类,派生于ProgramStatement;而所有的控制流包括ProgramStatementBlock,都派生于这个复合类CompositeProgramStatement

    接着创建了IfElse活动和While活动,以及Interleave活动。
        其中,InterLeave活动,并行的执行它所包含的语句组件,直至全部执行完毕。

    为了防止ProgramStatement的方法被外界随便调用,将其声明为protected internal,从而只能由书签管理器间接调用。

    * Done()方法,仅限于每个活动中都仅有一个Bookmark,而且没有参数;不然,要重载Done()方法,加上bookmarkName和payload这两个参数

    *注:为了让所有的OpenSesame()方法格式统一,现在一致使用Start()取代Run()方法,将所有的BookmarkLocation变量名统一为bookmarkLocation,由此在原书代码上有所修改,但是使整章风格一致。

  • 相关阅读:
    第42天:焦点图
    第41天:匀速、缓动运动和图片无缝滚动
    第40天:字符串操作:截取字符串
    MyBatis一级缓存(转载)
    Mycat 做简单的读写分离(转载)
    ui设计的好网站(转载)
    Java面试常问的问题(转载)
    ios学习的博客地址
    策略模式
    dubbo框架的简单介绍
  • 原文地址:https://www.cnblogs.com/Jax/p/1079902.html
Copyright © 2011-2022 走看看