策略模式

Posted osbreak

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了策略模式相关的知识,希望对你有一定的参考价值。

策略模式是指定义一系列的算法,把它们一个个封装起来,并且使它们可相互替换。
本模式使得算法可独立于使用它的客户而变化。
也就是说这些算法所完成的功能一样,对外的接口一样,只是各自实现上存在差异。
用策略模式来封装算法,效果比较好。

 

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;
}

 




以上是关于策略模式的主要内容,如果未能解决你的问题,请参考以下文章

Redis实现分布式锁(设计模式应用实战)

用于从 cloudkit 检索单列的代码模式/片段

代码片-策略模式+工厂模式

代码片-策略模式+工厂模式

代码片-策略模式+工厂模式

代码片-策略模式+工厂模式