一,策略模式
要解决的问题:
如何让算法和对象分开来,使得算法可以独立于使用它的对象而变化?
解决方法:
定义一系列的算法,把每一个算法封装起来, 并且使它们可相互替换。本模式使得算法可独立于使用它的对象而变化。
应用实例:
我们设计一个射击类的游戏,里面的相同类型的人物可以使用不同的方式来计算自己的健康值。下面是具体的代码实现:
#include <iostream>
using namespace std;
class GameCharacter{
public:
typedef int (*HealthFunc)(const GameCharacter &);
GameCharacter(HealthFunc healthFunc):healthFunc(healthFunc){}
int healthValue() const{
return healthFunc(*this);
}
private:
HealthFunc healthFunc;
};
class BadGuy : public GameCharacter{
public:
BadGuy(HealthFunc healthFunc):GameCharacter(healthFunc){}
};
int loseHealthQuick(const GameCharacter &re){
cout<<"使用 loseHealthQuick 计算健康值."<<endl;
return 10;
}
int loseHealthSlow(const GameCharacter &re){
cout<<"使用 loseHealthSlow 计算健康值."<<endl;
return 20;
}
int main() {
BadGuy badGuy1(loseHealthQuick);
badGuy1.healthValue();
BadGuy badGuy2(loseHealthSlow);
badGuy2.healthValue();
return 0;
}
输出结果
使用 loseHealthQuick 计算健康值.
使用 loseHealthSlow 计算健康值.
Process returned 0 (0x0) execution time : 0.010 s
Press any key to continue.
程序分析
根据程序的输出结果,我们可以看出同一种类型的人物可以使用不同的计算健康的方法。