浅谈我所用到的一些设计模式
Null Object 模式
这个是前几天才看的,在《从重构到模式》和《重构》都有见到过,我其实到现在也就似是而非的用过一次。下面着重描述一下该场景:
上个月在设计那个cdt子站端驱动,该驱动主要就是循环向串口发送数据,同时还要接收远端通过串口发送过来的命令,由于命令的种类很多,根据每个命令的帧类别和功能码来识别命令,每个命令根据参数的不同会有一些不同的操作,如果按照传统的过程化程序设计方式,将会产生大量的if else 语句,于是我想到了使用Stratry模式,每接受到主站端的一个命令,就把它传送给cdt规约类解码,解码后就返回一个该命令对应的命令类的对象,并把用该命令提供的一些参数赋值给该对象。在得到命令对象之后,就可调用该命令的接口来完成该命令所对应的一些操作。命令类的结构关系如图1所示。
本来以为用Stratry 模式能够很好的解决问题,可是后来发现,有的时候主站端可能会发送一些子站端不支持的命令,这样子解码器就无法得到对应的命令对象,所以就可能返回nil,一旦返回了一个nil值,在后面执行该命令对象的时候,总要事先判断一下是不是为空。于是if else语句就出现了,坏味道就来了。
由于最近才看的null object模式,感觉这种症状正式null Object模式所针对的。于是我就毫不客气上下齐手的对该程序采用null object模式进行了重构,为系统添加了一个UnHandledCommand类,对于所有子站端不支持的命令,都统一返回一个UnHandledCommand类的对象,这样在后面执行该命令的过程中,就不要担心他可能会是nil值了,直接调用该对象的相关接口即可,就象其他正常的命令对象一样。

浙公网安备 33010602011771号