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