文章目录
  1. 1. 功能库构建
  2. 2. 策略模式
  3. 3. 功能扩展完善

功能库构建

利用策略与工厂模式,构建了某闭源的功能模型库,主要用于无人飞行器上的自主寻的制导。现将骨干程序抽离如下:首先定义了导引律接口(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的若干种具体实现)。因为提供的功能库仅为二进制形式,无法直接修改源码,造成了功能扩展的不便。那么,应该如何才能够便捷地实现上述功能呢?或者说,在设计功能模型时,应该如何优化实现方案,以便满足用户实际使用过程中的快捷功能扩展?

文章目录
  1. 1. 功能库构建
  2. 2. 策略模式
  3. 3. 功能扩展完善