功能库构建
利用策略与工厂模式,构建了某闭源的功能模型库,主要用于无人飞行器上的自主寻的制导。现将骨干程序抽离如下:首先定义了导引律接口(Interface),在C++中采用了纯虚函数来实现,然后采用公有继承的方法,实现了三种典型的导引律,包括:比例导引律(PN)、修正比例导引律(APN)和追踪法导引律(TPN)。相关代码如下图所示:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43
| enum HOMINGLAW { PN, APN, TPN, } class GuidanceLaw { public: GuidanceLaw(); virtual ~GuidanceLaw(); public: virtual BOOL Initialize() = 0; virtual void Advance() = 0; ………… }; class PNGuidanceLaw : public GuidanceLaw { BOOL Initialize(); void Advance(); }; class APNGuidanceLaw : public GuidanceLaw { BOOL Initialize(); void Advance(); }; class TPNGuidanceLaw : public GuidanceLaw { BOOL Initialize(); void Advance(); };
|
策略模式
在实现了上述三种典型的导引律基础上,采用策略与简单工厂模式,完成了自主寻的制导功能模型的开发,概述如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
| class Guidance { public: Guidance() : pGuidanceLaw(NULL) { } Guidance(HOMINGLAW law) { switch(law) { case PN: pGuidanceLaw = new PNGuidanceLaw; break; case APN: pGuidanceLaw = new APNGuidanceLaw; break; case TPN; pGuidanceLaw = new TPNGuidanceLaw; break; default: pGuidanceLaw = new PNGuidanceLaw; break; } } virtual ~Guidance(); ………… protected: GuidanceLaw* pGuidanceLaw; ………… };
|
功能扩展完善
在实际使用上述闭源模型过程中,用户提出需要新增一至两种导引律(也就是要增加GuidanceLaw的若干种具体实现)。因为提供的功能库仅为二进制形式,无法直接修改源码,造成了功能扩展的不便。那么,应该如何才能够便捷地实现上述功能呢?或者说,在设计功能模型时,应该如何优化实现方案,以便满足用户实际使用过程中的快捷功能扩展?