随笔分类 -  软件设计

摘要:分层状态机的设计:对于状态较多的状态机,通常的设计会维护一个庞大的二维矩阵,所有状态耦合在一起,这往往导致维护困难,由于可能存在许多公共的特性,也会导致许多状态具有相同的处理函数。针对这些问题我们可以通过设计分层状态机来解决,主要的思想就是根据不同的功能模块设计出多个状态机,各个状态机分布在不同的层次上。上层状态机调用下层状态机时,上层状态机入栈,下层状态机变为当前处理状态机。通常我们使用堆栈来保存当前状态机的上层状态机信息。下图描述一个分层状态机设计实现:如上图所示,假设L1为上层状态机,L1状态机在L1_STATE2中可以通过L1L2_EVENT1事件触发进入L2状态机,L2状态机在L2_ 阅读全文
posted @ 2012-06-28 00:01 平凡之路 阅读(14061) 评论(1) 推荐(3) 编辑
摘要:有限状态机(FSM)是表示有限个状态及在这些状态之间的转移和动作等行为的数学模型,在计算机领域有着广泛的应用。通常FSM包含几个要素:状态的管理、状态的监控、状态的触发、状态触发后引发的动作。本文主要阐述一下状态机的几种设计方法。1:switch case/if else设计方法curEvent = getEvent();curState = getCurState();switch(curState){ case state1: { switch(curEvent ) { TODO... setCurSt... 阅读全文
posted @ 2012-06-25 22:48 平凡之路 阅读(34200) 评论(7) 推荐(7) 编辑
摘要:内存池的实现:1:内存池的初始化:对每个子池进行初始化流程,将子池的入口放入内存池中,初始化block状态。void initPools(){ initPool(POOL1,(void*)pool1,POOL1_BLOCK_NUM,POOL1_BLOCK_SIZE); initPool(POOL2,(void*)pool2,POOL2_BLOCK_NUM,POOL2_BLOCK_SIZE); initPool(POOL3,(void*)pool3,POOL3_BLOCK_NUM,POOL1_BLOCK_SIZE); return;}void initPool(unsig... 阅读全文
posted @ 2012-06-23 15:12 平凡之路 阅读(2350) 评论(0) 推荐(2) 编辑
摘要:http://www.cnblogs.com/chencheng 阅读全文
posted @ 2012-06-22 17:20 平凡之路 阅读(2417) 评论(3) 推荐(2) 编辑
摘要:一个成功的软件系统,往往需要根据需求在不同的系统平台上运行,为了解决系统在多个平台的移植带来的风险,业务架构往往会设计相应的平台适配层来隔离不同平台的差异,如何设计一个易于扩展的平台适配层,是软件设计人员需要考虑的问题。设计1:1: 提供平台接口文件os.h2:定义如下:#ifdef OS1#define OS_Fun OS1_Fun#endif#ifdef OS2#define OS_Fun OS2_Fun#endifvoid OS_Fun();3:通过定义不同的系统宏,这个头文件展开后也就成了对应的平台的接口层。4:业务代码直接调用OS_Fun()这个统一的接口即可。5:该设计只需要一个通 阅读全文
posted @ 2012-06-20 21:30 平凡之路 阅读(2165) 评论(0) 推荐(0) 编辑
摘要:FACADE这种设计模式本身比较简单,核心思想就是外部系统同本系统的需要通过门面来进行通信,这样可以屏蔽业务细节,不管系统内部如何变化,怎么复杂,但是对外系统呈现一个简单的结构。对于软件模块采用消息通行机制的分布式系统,通常的架构设计为底层平台开放模块消息处理的注册接口,各个模块将自己的消息处理函数进行注册,我们可以把这个消息入口看成子系统的一个门面,所有的发往某个模块的消息都通过注册的消息处理函数来入口void ModuleMsgFun(){ switch(sendModule) { case module1: TODO... .... case modulen: TODO... }}这个M 阅读全文
posted @ 2012-06-19 22:11 平凡之路 阅读(814) 评论(0) 推荐(0) 编辑