设计模式 之美 -- 策略模式
策略模式作为行为型设计模式中的一种,主要封装相同功能的不同实现算法,用于在用户程序内部灵活切换。对用户来说能够快速替换对应的算法,能够让算法的实现独立于使用的用户。
基本的UML类图如下:
用户使用Stratey的实例能够快速得在不同的Cache算法之间灵活切换(直接使用对应的Cache实例来设置到Strategy之中即可。),而不用关注具体的算法实现。
#include <iostream>
#include <string>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
相关文章:

Good Bye 2014 B. New Year Permutation(floyd )
题目链接 题意:给n个数,要求这n个数字小的尽量放到前面,求一个最小的。 给一个矩阵s[i][j]1,表示位置 i 的数字可以和 位置 j 的数字交换。 分析: 刚开始用的是3个循环,每次都找一个能直接连接的最小的放到前面&#x…

android数据库查找一个字符,Android - 如何在Firebase数据库中对字符串进行简单搜索?_android_开发99编程知识库...
这个问题可能很旧,但是,有一种文档化方式,如何实现这种方式,很简单,引用 :要启用云Firestore数据的全文搜索,请使用第三方搜索服务(如Algolia ,考虑一个笔记记录应用程序,…

料酒有什么用?
http://zhidao.baidu.com/question/201086759.html?frala&devicemobile&ssid0&from844b&uid0&pusz%401320_1001%2Cta%40iphone_2_4.1_3_537%2Cusm%400&bd_page_type1&baiduidDFA2DBA38D5C3AEB12431C4258DC1F40&tjzhidao_1_0_10_title

jmeter对自身性能的优化
测试环境 apache-jmeter-2.13 1. 问题描述 单台机器的下JMeter启动较大线程数时可能会出现运行报错的情况,或者在运行一段时间后,JMeter每秒生成的请求数会逐步下降,直到为0,即JMeter运行变得很“卡”。 2. 解决方法 1&#x…

站在历史的长河中做农活
苹果的生长周期 国庆节回老家呆了3天时间,陪爸爸妈妈吃喝吃睡,除此之外就是帮爸爸妈妈去家里的果园做一些农活。 我们老家的 苹果种植是家庭主要的收入,每一家人或多或少都有一些果园。从春的剪枝(高中生物中的降低顶端优势&…
html 基本用法
html表单表格基本用法,直接贴代码。 [html] view plaincopy<html> <head> <title>html基础</title> </head> </body> <center><h2><font color"CYAN">html基础&…

ecliplse 调试android 断点,如何在Github maven项目上开始调试
您将需要在 nifi-registry.sh 脚本中编辑此行以启用远程调试run_nifi_registry_cmd"${JAVA} -cp ${BOOTSTRAP_CLASSPATH} -Xms12m -Xmx24m ${BOOTSTRAP_DIR_PARAMS} org.apache.nifi.registry.bootstrap.RunNiFiRegistry $"它只是我,还是记忆足迹真的很小…

Linux认证体系
就像网络工程师的认证有思科系统和华为系列一样,Linux认证方面,不同的机构也有不同的证书,比如国内有红旗Linux的认证RCE(红旗Linux认证工程师),国际方面有红帽的认证RHCSA(Redhat认证的Linux系…

python2.7 Cheetah You don't have the C version of NameMapper installed
python2.7 Cheetah You dont have the C version of NameMapper installed 问题:You dont have the C version of NameMapper installed sudo vi /usr/lib/python2.7/site-packages/Cheetah/Compiler.py 将第1506行起以下代码注释掉: if not NameMapper.…

C++ 从双重检查锁定问题 到 内存屏障的一些思考
文章目录1. 问题描述2. DCLP 的问题 和 指令执行顺序2.1 Volatile 关键字2.2 C11 的内存模型3. C11内存模型 解决DCLP问题3.1 内存屏障和获得、释放语义3.2 atomic 的完整介绍3.2.1 原子操作的三种类型3.2.2 atomic 内存序3.2.3 atomic 成员函数4. 总结1. 问题描述 单例模式 是…

android系统的iphone,iPhone上安装Android系统详细步骤。
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼在iphone安装android系统的详细步骤首先,准备好iphone的多点触屏和wlan固件。因为法律的缘故,我们不能分享这些文件,你可以去ipsw文件里提取或去marvell网站下载。1、在linux的home目录下创建一个…

Linux下GCC和Makefile实例(从GCC的编译到Makefile的引入) 转
http://www.crazyant.net/2011/10/29/linux%E4%B8%8Bgcc%E5%92%8Cmakefile%E5%AE%9E%E4%BE%8B%EF%BC%88%E4%BB%8Egcc%E7%9A%84%E7%BC%96%E8%AF%91%E5%88%B0makefile%E7%9A%84%E5%BC%95%E5%85%A5%EF%BC%89/ 很给力的说,回头去搞搞!

服务端如何识别是selenium在访问以及解决方案参考二
有不少朋友在开发爬虫的过程中喜欢使用Selenium Chromedriver,以为这样就能做到不被网站的反爬虫机制发现。 先不说淘宝这种基于用户行为的反爬虫策略,仅仅是一个普通的小网站,使用一行Javascript代码,就能轻轻松松识别你是否使用…

LSM 优化系列(二)-- dCompaction: Speeding up Compaction of the LSM-Tree via Delayed Compaction
文章目录背景描述dCompaction设计触发条件 VCT触发VT 合并的条件 VSMT测试数据优化的重心集中在减少写放大上,同时将读性能维持在和rocksdb 原生读性能接近,优化思想是中国科学院的2位博士 提出的。论文原地址:dCompaction: Speeding up Comp…

Android应用系列:完美运行GIF格式的ImageView(附源码)
前言 我们都知道ImageView是不能完美加载Gif格式的图片,如果我们在ImageView中src指定的资源是gif格式的话,我们将会惊喜的发觉画面永远停留在第一帧,也就是不会有动画效果。当然,经过略加改造,我们是可以让gif在Image…

wordpress怎么修改html,WordPress后台编辑器HTML模式界面中添加修改删除按钮
在WordPress编辑器HTML模式界面中添加按钮一文中,我大致介绍了怎么在后台添加一些自定义的按钮,本文则更为详细全面的对wordpress后台编辑器HTML模式下的按钮自定义进行详解,以让开发者肆意的修改按钮及其布局。自定义按钮起效的两种途径 ↑首…

OCA读书笔记(9) - 管理数据同步
9.Managing Data Concurrency 描述锁机制以及oracle如何管理数据一致性监控和解决锁冲突 管理数据的并发--管理锁数据的不一致:脏读更改丢失幻影读 脏读:数据是指事务T2修改某一数据,并将其写回磁盘,事务T1读取同一数据后,T2由于某…

Java EE学习笔记(四)
Spring的数据库开发 1、Spring JDBC 1)、Spring JDBC模块的作用:Spring的JDBC模块负责数据库资源管理和错误处理,大大简化了开发人员对数据库的操作,使得开发人员可以从繁琐的数据库操作中解脱出来,从而将更多的精力投入到编写业务…

SpringBoot 中实现订单30分钟自动取消的策略
在电商和其他涉及到在线支付的应用中,通常需要实现一个功能:如果用户在生成订单后的一定时间内未完成支付,系统将自动取消该订单。本文将详细介绍基于Spring Boot框架实现订单30分钟内未支付自动取消的几种方案,并提供实例代码。

一键部署 SpringCloud 微服务,这套流程值得学习一波儿!
一键部署 springcloud 微服务,需要用到 Jenkins K8S Docker等工具。本文使用jenkins部署,流程如下图开发者将代码push到git运维人员通过jenkins部署,自动到git上pull代码通过maven构建代码将maven构建后的jar打包成docker镜像 并 push docker镜像到docker registry通过k8s发起 发布/更新 服务 操作其中 2~5步骤都会在jenkins中进行操作。

Rocksdb 的 rate_limiter实现 -- compaction限速
文章目录前言1. Compaction为什么会影响Client qps1.1 基本LSM介绍1.2 LSM internal ops1.3 长尾延时的原因2. Rate limiter 基本限速接口3. Rate Limiter 限速原理实现3.1 Rate Limiter的传入3.2 Rate Limiter 控制 sync datablock的速率3.3 Rate Limiter控制写入速率4. rocks…

Oracle --获取绑定变量的值.
SELECT * FROM DBA_HIST_SQLBIND WHERE SNAP_ID>67073 AND SNAP_ID<67079 AND SQL_ID3DR3410F086P4;SELECT * FROM v$sql_bind_capture where sql_id http://blog.itpub.net/22034023/viewspace-689802/ 通过v$sql_bind_capture视图,可以查看绑定变量…

计算机网络TCP/IP协议-从双绞线到TCP
消息响应也是同理,这种带端口的消息发送方式,其实就是UDP协议,UDP简单粗暴,但是UDP存在很多问题,所以我们需要设计一个稳定可靠的协议,TCP协议,首先,网络是不稳定的,我们发送的消息很有可能会在中途丢失,所以需要设置重试机制,当消息发送失败时重新发送,为了判断是否成功,还需要要求接收方收到消息后,必须发送确认消息,这样就可以保证消息必达,另外大段的内容发送,很容易造成部分丢失,导致全部内容都要重新发送,于是我们可以将数据分包,分成多个包发送。到这,也行你会发现了,演示中的IP地址是怎么设置的呢?

使用HTML CSS完成初步的页面,任务九:使用HTML/CSS实现一个复杂页面(示例代码)
任务目的通过实现一个较为复杂的页面,加深对于HTML,CSS的实战能力实践代码的复用、优化任务描述整个页面内容宽度固定,但头部的蓝色导航和浏览器宽度保持一致任务注意事项只需要完成HTML,CSS代码编写,不需要写JavaScri…

Yii-yiic使用
原文在:http://blog.sina.com.cn/s/blog_862b12fb0101n00v.htmlyii提供了强大的命令行工具来快速的创建相关组件和应用。下面就来讲解用yiic工具快速创建yii应用我的web目录在d:\ EasyPHP-DevServer\data\localweb下;yiiframework在D:\EasyPHP-DevServer…

nginx语法
一、 1. 配置文件由指令与指令块构成; 2. 每条指令以;分号结尾,指令与参数间以空格符号分隔; 3. 指令块以{} 大括号将多条指令组在一起; 4. include语句允许组合多个配置文件以提升可维护性; 5. 使用#符号添…

如何对 Rocksdb以及类似存储引擎社区 提出 有效的性能问题?
性能 是rocksdb的优点,活跃的社区十分欢迎大家对各自使用rocksdb 过程中性能相关的疑惑点进行提问。提问的时候如果能够提供更多,更详细的信息 是可以增加快速得到恢复回复的概率。当然,性能是一个非常广泛且有巨量影响因素的话题,…

我已经喜欢上了Python
早就听说了Python语言,今天试了试,挺喜欢她了。 Python 3.4.2 (v3.4.2:ab2c023a9432, Oct 6 2014, 22:15:05) [MSC v.1600 32 bit (Intel)] on win32Type "copyright", "credits" or "license()" for more information.&g…

layui跳转html如何带参数,Layui跳转页面代码(可携带复杂参数)
今天用了Layui的“数据表格 - 数据操作”示例代码,结果发现点击“编辑”按钮出出来一个弹出消息框,效果如下:虽然说也可以用“弹出层”做编辑页面,但是,由于我编辑的东西很多,用“弹出层”不太理想。我就想…

java获取日期
/* * 获取昨天日期 方法一,这个方法好像有点慢 */Date dt new Date(); Calendar cal Calendar.getInstance();cal.add(Calendar.DATE, -1);time new SimpleDateFormat( "yyyy-MM-dd").format(cal.getTime()); /* * 获取昨天日期 方法二 */Date as ne…