设计模式C++实现(2)——策略模式

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

       什么是Cache的替换算法呢单解释一下, 当发生Cache缺失时,Cache控制器必须选择Cache中的一行,并用欲获得的数据来替换它。所采用的选择策略就是Cache的替换算法。下面给出相应的UML图。

  1. //抽象接口  
  2. class ReplaceAlgorithm  
  3. {  
  4. public:  
  5.     virtual void Replace() = 0;  
  6. };  
  7. //三种具体的替换算法  
  8. class LRU_ReplaceAlgorithm : public ReplaceAlgorithm  
  9. {  
  10. public:  
  11.     void Replace() { cout<<“Least Recently Used replace algorithm”<<endl; }  
  12. };  
  13.   
  14. class FIFO_ReplaceAlgorithm : public ReplaceAlgorithm  
  15. {  
  16. public:  
  17.     void Replace() { cout<<“First in First out replace algorithm”<<endl; }  
  18. };  
  19. class Random_ReplaceAlgorithm: public ReplaceAlgorithm  
  20. {  
  21. public:  
  22.     void Replace() { cout<<“Random replace algorithm”<<endl; }  
  23. };  

         接着给出Cache的定义,这里很关键,Cache的实现方式直接影响了客户的使用方式,其关键在于如何指定替换算法。

         方式一:直接通过参数指定,传入一个特定算法的指针。

[cpp]  view plain  copy  print

  1. //Cache需要用到替换算法  
  2. class Cache  
  3. {  
  4. private:  
  5.     ReplaceAlgorithm *m_ra;  
  6. public:  
  7.     Cache(ReplaceAlgorithm *ra) { m_ra = ra; }  
  8.     ~Cache() { delete m_ra; }  
  9.     void Replace() { m_ra->Replace(); }  
  10. };  

          如果用这种方式,客户就需要知道这些算法的具体定义。只能以下面这种方式使用,可以看到暴露了太多的细节。

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2016年11月1日
下一篇 2016年11月1日

相关推荐