策略(strategy)模式定义一系列算法,把它们一个个封装起来,使得它们可以相互替换。策略模式使得算法变化可独立于使用它的用户
//抽象策略
class Strategy
{
public:
virtual void calStrategy() = 0;
};
//实现策略1类
class AK :public Strategy {
public:
virtual void calStrategy() {
cout << "使用AK-------" << endl;
}
};
//实现策略3类
class Gun :public Strategy {
public:
virtual void calStrategy() {
cout << "使用手枪-------" << endl;
}
};
//使用策略类
class Person {
public:
void set(Strategy* stratrgy) {
this->pStrategy = stratrgy;
}
void use() {
cout << this <<" ";
this->pStrategy->calStrategy();
}
public:
Strategy* pStrategy = nullptr;
};
void test(){
//角色
Person *man = new Person;
Person* woman = new Person;
//策略
Gun* gun = new Gun;
AK* ak = new AK;
//不同角色使用不同策略
man->set(gun);
woman->set(ak);
man->use();
woman->use();
delete man;
delete woman;
delete gun;
delete ak;
}
策略模式与模板方法模式的不同:
策略模式:定义了一组算法,将每个算法都封装起来,并且使它们之间可以互换。关键点在于每个算法都是过程完整且独立的。
模板方法模式:模板则是将骨架定义好,例如执行的步骤或先后顺序。骨架中的部分在父类中进行实现,而子类的个性化行为则由子类继承再加以实现。
区别的本质就是策略模式是替换了整个流程。而模板模式替换的是固定流程中的一些特定的内容