首页 > 设计模式 之美 -- 策略模式

设计模式 之美 -- 策略模式

策略模式作为行为型设计模式中的一种,主要封装相同功能的不同实现算法,用于在用户程序内部灵活切换。对用户来说能够快速替换对应的算法,能够让算法的实现独立于使用的用户。

基本的UML类图如下:

在这里插入图片描述

用户使用Stratey的实例能够快速得在不同的Cache算法之间灵活切换(直接使用对应的Cache实例来设置到Strategy之中即可。),而不用关注具体的算法实现。

#include 
#include using namespace std;class Cache { 
public:virtual void use_cache() = 0;virtual ~Cache(){ }
};class LRU: public Cache { 
public:LRU(){ }void use_cache() { cout << "Use LRU Cache " << endl;}};class Clock: public Cache { 
public:Clock(){ }void use_cache() { cout << "Use Clock Cache " << endl;}};class Strategy { 
public://explicit Strategy(Cache *cache, string name): _cache(cache),res(name) {}Strategy(Cache *cache, string name): _cache(cache),res(name) { }void set_cache(Cache *cache) { this -> _cache = cache;}void use_cache() { cout << "strategy name is : "<< res << endl;_cache->use_cache(); }private:Cache *_cache;string res;
};int main() { LRU *caheA = new LRU();Clock *caheB = new Clock();Strategy stra(caheA, "stra");Strategy strb(caheB, "strb");stra.use_cache();strb.use_cache();cout << "Change the strategy Quickly" << endl;stra.set_cache(caheB);strb.set_cache(caheA);stra.use_cache();strb.use_cache();return 0;
}

输出如下:

strategy name is : stra
Use LRU Cache
strategy name is : strb
Use Clock Cache
Change the strategy Quickly
strategy name is : stra
Use Clock Cache
strategy name is : strb
Use LRU Cache

更多相关:

  • 本文研究nginx提供的缓存功能,下面是实操记录。 这篇博文基于前面文章的基础上搭建,至始至终都是root用户操作 http://blog.csdn.net/tao_627/article/details/78953800 缓存清除功能需要借助第三方模块ngx_cache_purge,其链接如下 https://github...

  • 下面是参考文献[1]的翻译 简介 ATS既可以用作HTTP代理,也可以用作HTTP缓存,ATS能够缓存任何字节流,虽然它当前只支持HTTP协议传输的字节流,当这样的流缓存时,会带一个HTTP协议头部,会命名为缓存中的一个对象object。每个对象通过一个名为cache key的全局唯一值识别。 该文档的目的是描述ATS缓...

  • 对Squid使用的几点总结 1.cache_dir 在Linux环境下用aufs类型的cache_dir比较稳定,速度也比较快。cache_dir所在文件系统如果用noatime选项来mount,可以避 免访问cache文件时经常要更新access time的操作。 一般cache容量和被加速内容的比值...

  • 环境 ceph版本:12.2.1 部署模式:ec 2+1 osd: 3个 且资源池已经有数据 执行命令:ceph daemon osd.0 flush_store_cache 进行刷缓存。即将dump_mempools内存池管理的bluestore cache中的无用数据进行释放 主要参数: bluestore_cache_tr...

  • 引言 在这个-SLAM建图和导航仿真实例-项目中,主要分为三个部分,分别是 (一)模型构建(二)根据已知地图进行定位和导航(三)使用RTAB-MAP进行建图和导航 该项目的slam_bot已经上传我的Github。 这是第三部分,完成效果如下 图1 建图和导航 三、使用RTAB-Map进行建图和导航 1. rtab...

  • 引言 在这个-SLAM建图和导航仿真实例-项目中,主要分为三个部分,分别是 (一)模型构建(二)根据已知地图进行定位和导航(三)使用RTAB-MAP进行建图和导航 该项目的slam_bot已经上传我的Github。 由于之前的虚拟机性能限制,我在这个项目中使用了新的ubantu 16.04环境,虚拟机配置 内存 8GCPU...

  • [{name:1},{name:2}].forEach((v,i,ar) => {console.log(v,i,ar)});//基础遍历[{name:1},{name:2}].map((v) => v.name);//[1,2]返回对象数组中指定字段值的一位数组(不改变原始数组)[{name:1},{name:2},{name:3}...

  • 体验内容 使用gmapping方法利用turtlebot底盘移动信息和激光雷达数据进行建图。 1. 安装一些依赖包 sudo apt-get install ros-melodic-move-base* sudo apt-get install ros-melodic-map-server* sudo apt-get insta...

  • 前言 我们知道Java/Python这种语言能够很好得 支持反射。反射机制 就是一种用户输入的字符串到对应实现方法的映射,比如http接口中 用户传入了url,我们需要调用该url对应的方法/函数对象 从而做出对应的操作。 而C++ 并没有友好得支持这样的操作,而最近工作中需要通过C++实现http接口,这个过程想要代码实现得优雅...