天天看點

常用設計模式-政策模式

         政策(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;
}
           

政策模式與模闆方法模式的不同:

        政策模式:定義了一組算法,将每個算法都封裝起來,并且使它們之間可以互換。關鍵點在于每個算法都是過程完整且獨立的。

        模闆方法模式:模闆則是将骨架定義好,例如執行的步驟或先後順序。骨架中的部分在父類中進行實作,而子類的個性化行為則由子類繼承再加以實作。

        差別的本質就是政策模式是替換了整個流程。而模闆模式替換的是固定流程中的一些特定的内容

繼續閱讀