政策(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;
}
政策模式與模闆方法模式的不同:
政策模式:定義了一組算法,将每個算法都封裝起來,并且使它們之間可以互換。關鍵點在于每個算法都是過程完整且獨立的。
模闆方法模式:模闆則是将骨架定義好,例如執行的步驟或先後順序。骨架中的部分在父類中進行實作,而子類的個性化行為則由子類繼承再加以實作。
差別的本質就是政策模式是替換了整個流程。而模闆模式替換的是固定流程中的一些特定的内容