策略模式

策略模式是指定义一系列的算法,把它们一个个封装起来,并且使它们可相互替换。
本模式使得算法可独立于使用它的客户而变化。
也就是说这些算法所完成的功能一样,对外的接口一样,只是各自实现上存在差异。
用策略模式来封装算法,效果比较好。
class STReplace
{
public:
    virtual void Replace() = 0;
};
//三种具体的替换算法
class LRU_Replace : public STReplace
{
public:
    void Replace() { cout<<"LRU"<<endl; }
};

class FIFO_Replace : public STReplace
{
public:
    void Replace() { cout<<"FIFO"<<endl; }
};

class Random_Replace: public STReplace
{
public:
    void Replace() { cout<<"Random"<<endl; }
};
//Cache需要用到替换算法
enum RA {LRU, FIFO, RANDOM}; //标签
class Cache
{
private:
    STReplace *m_ST;
public:
    Cache(enum RA ra) 
    { 
        if(ra == LRU)
            m_ST = new LRU_Replace();
        else if(ra == FIFO)
            m_ST = new FIFO_Replace();
        else if(ra == RANDOM)
            m_ST = new Random_Replace();
        else 
            m_ST = NULL;
    }
    ~Cache() { delete m_ST; }
    void Replace() { m_ST->Replace(); }
};
int main()
{
    Cache cache(LRU); //指定标签即可
    cache.Replace();
    return 0;
}
原文地址:https://www.cnblogs.com/osbreak/p/10111410.html