设计模式应用之使用COMPOSITE模式实现流程(三)

                                   () 流程的COMPOSITE模式

             10086流程的基本过程:播放语音、播放语音取按键、根据按键执行特定的操作。
因此,可以定义流程的每一个基本操做为一个 STATE模式,流程是由这些 STATE组成,
即流程可以分解成一些基本 STATE的集合。
流程与用户之间有很多的交互,与用户的交互结果决定了流程的下一个动作。但是同时使用流程的用户是很多。因此对用户请求的处理是多线程的:
(1)              一个用户一个线程(缺点:一个用户一个线程,流程是要花费代价去创建线程,如果同时使用的用户很多,那么创建的线程也多)。
(2)              线程池,程序创建一个线程池,对于用户的请求进行任务分派。
一般的解决方式是采用方法(2),流程与用户的交互是异步的。 STATE的转变是基于事件的,而不是简单的遍历。
     在实现的过程中,播放语音是一个基本的操作,播放语音取按键也是一个基本的操作,与用户的交互后,执行特定的操作,每个这样的操作也是基本的操作,但是取按键后的操作可以是一个简单的操作( Leaf),可以是一个复合的操作( COMPOSITE)。
     以下是简要的实现思路:
1:流程是由一序列的 STATE组成。
2: STATE 可以分为简单的 Leaf、复杂的 COMPOSITECOMPOSITE是组合那些没有用户交互的 STATE,采用 COMPOSITE是为了提高代码的复用率。为了 STATE 的共用性, STATE与对象的状态通过 MEMENTO传递。每个状态执行后将保存该次执行后的 MEMENTO
3:流程里面的有些操作有跳转到上一级目录的操作,也就是说在 STATE 中得有获取上一级目录的方法。由于状态与用户是有交互,因此允许用户在交互的时候有一定的错误数次,在用户错误的交互后,该状态必须回滚到前一状态,每个状态也必须知道它的直接的后继状态。
4: STATE对象与其成员函数的运行状态通过 MEMENTO解耦。因此在程序中对于公用的 STATE对象用一个整型 ID标志。
5: MEMENTO保存 STATE对象必需的对象信息,有些 STATE对象不能很明确知道自己的上一级目录,或是它的上一个状态,而这些必需通过 MEMENTO 获取。

以下是简要的设计结构图:

DEMO等比较空闲的时候,再提供!

谢谢大家的阅读,欢迎提出修改的建议。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值