码迷,mamicode.com
首页 > 其他好文 > 详细

策略模式

时间:2018-12-12 23:53:10      阅读:280      评论:0      收藏:0      [点我收藏+]

标签:功能   else   turn   pre   nbsp   算法   delete   code   virt   

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

 

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

 

策略模式

标签:功能   else   turn   pre   nbsp   算法   delete   code   virt   

原文地址:https://www.cnblogs.com/osbreak/p/10111410.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!