命令池的实现

来源:互联网 发布:淘宝大促活动有哪些 编辑:程序博客网 时间:2024/06/15 09:39



图1 命令池类图


一、首先要清楚命令池要实现的功能

        学习代码为了帮助分析,大概总结了下,最基本的功能有如下几个:开启执行线程,设置命令回调接口,记录线程对命令的执行时间,命令执行的调度算法。类图就是按照这几个主要的功能来实现的,CThreadRunner类为记录线程运行时间的类。


二、对于设计的一点疑问

       为什么CSchedule使用继承,而CCommandPool类使用策略,主要原因可能是CComandPool中没有实现任何一个成员函数,那么继承的复用优势就一点也没有体现出来。如果把CComandPool里面成员函数定义成虚接口,CComandPoolImpl继承实现接口,其实也可以。虽然继承有“强侵入”性质,但是基本上所有的CComandPool的子类都要实现这几个接口,这里的需求改变可能性不大(不是业务逻辑,而是技术上的逻辑实现,除非给命令池增加新功能,可能性不大,如果真的有变动,那么可以使用桥接模式,可以使用抽象和具体实现两个维度的变化,如果CComandPoolImpl的实现有改变,那么可以继承一个类重写)。同理CThreadPool也是。

        类图中,其实CComandPoolImpl并不是直接依赖于CCommandHandler和CCommandScheduler,这两个类CCommandRunner直接依赖,那么设计的时候完全可以让CComandPoolImpl不依赖于这个类,为什么类中还要依赖?我理解可能是有点类似于外观模式,如果CComandPoolImpl不依赖于那两个类,那么用户就得知道CComandRunner依赖于那两个类,使用的时候要先把CCommandRunner设置好,在设置CComandPoolImpl,但是如果设计成类图中那样,虽然类中要多写一点点,但是用户不需要知道有什么CComandRunner类,直接用CComandHandler和CComandScheduler就可以构造CCommandPool了,而在CComandPoolImpl内部实现CCommandRunner的构造与设置。

原创粉丝点击