当你为解决问题而寻找某个设计方法时,不妨考虑virutal函数的替代方案,下面的解法吸引力在于,熟悉标准Strategy模式的同学,很容易辨认它,而且它还提供“将一个既有健康算法纳入使用”的可能性–只要为HealthCalcFunc继承体系添加一个derived class 即可,下面是具体的实现源码:
#include<iostream>
using namespace std;
class GameCharacter;
class HealthCalcFunc
{
public:
virtual int calc(const GameCharacter &gc)
{
cout << "计算方式1\n";
return 10 + 11;
}
};
class HealthCalcFunc2:public HealthCalcFunc
{
public:
virtual int calc(const GameCharacter &gc)
{
cout << "计算方式2\n";
return 22 + 11;
}
};
HealthCalcFunc g_defaultFunc;
class GameCharacter
{
public:
GameCharacter(HealthCalcFunc *pCalc = &g_defaultFunc):m_pCalc(pCalc)
{}
int GetHealthValue() const
{
return m_pCalc->calc(*this);
}
private:
HealthCalcFunc *m_pCalc;
};
void main()
{
GameCharacter g1;
cout << g1.GetHealthValue() << endl;
HealthCalcFunc2 h2;
GameCharacter g2(&h2);
cout << g2.GetHealthValue() << endl;
system("pause");
}
结果: