策略模式C++实现

1定义

(Strategy Pattern)定义一组算法,将每个算法都封装起来,并且使他们可以相互替换

也叫政策模式

2类图

3实现

class Strategy
{

protected:

  Strategy();

public:

  virtual ~Strategy() = 0;

  virtual void doSomething()=0;

};

class ConcreteStrategy1:public Strategy

{

public:

  void doSomething()

  {

    cout << "具体策略1的运算法则"<<endl;

  }

};

class ConcreteStrategy2:public Strategy

{

public:

  void doSomething()

  {

    cout << "具体策略1的运算法则"<<endl;

  }

};

//封装角色

class Context

{

private:

  Strategy * _str;

public:

  Context(Strategy * st)

    :_str(st)

  {}

  void doAnything()

  {

    _str->doSomething();  

  }

};

void Test

{

  Strategy * st = new ConcreteStrategy1();

  Context *con = new Context(st);

  con->doAnything();

}

4应用

①优点

算法可以自由切换

避免使用多重条件判断.将决策权转接给高层,你传入策略我执行该就可以

扩展性良好

②缺点

策略数量增多

所有的策略类都会暴漏在外,上层必须知道具体策略

注:这个缺点是可以通过其他方式进行弥补的eg工厂方法,代理模式,享元模式

5使用场景

多个类只有在算法上稍有不同

算法需要自由切换

需要屏蔽算法规则的地方。(仿函数类似)

注意事项,一个策略家族的具体策略数量不得超过4个,否则使用混合模式解决策略类膨胀和对外暴漏的问题。

6扩展

枚举策略

定义:它是一个枚举,浓缩了策略模式的枚举

枚举特性:pubic,finaly,static

所以在C++中其实就是一个一个类封装多个静态方法。(一半用作不经常改变的角色)

eg  Strategy::ADD();

  Strategy::Sub();....

设计模式--策略模式C++实现的更多相关文章

  1. 15. 星际争霸之php设计模式--策略模式

    题记==============================================================================本php设计模式专辑来源于博客(jymo ...

  2. [.net 面向对象程序设计深入](24)实战设计模式——策略模式(行为型)

    [.net 面向对象程序设计深入](24)实战设计模式——策略模式(行为型) 1,策略模式定义 策略模式定义了一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换.策略模式让算法独立于使用它 ...

  3. linkin大话设计模式--策略模式

    linkin大话设计模式--策略模式 Strategy [ˈstrætədʒi]  策略 策略模式用于封装系列的算法,这些算法通常被封装在一个称为Context的类中,客户端程序可以自由的选择任何一种 ...

  4. [.net 面向对象程序设计深入](26)实战设计模式——策略模式 Strategy (行为型)

    [.net 面向对象程序设计深入](26)实战设计模式——策略模式 Strategy (行为型) 1,策略模式定义 策略模式定义了一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换.策略模 ...

  5. 设计模式-策略模式(Strategy Model)

    1.概述     在开发过程中常常会遇到类似问题,实现一个功能的时候往往有多种算法/方法(策略),我们可以根据环境的不同来使用不同的算法或策略来实现这一功能.     如在人物比较排序的实现中,我们有 ...

  6. java设计模式 策略模式Strategy

    本章讲述java设计模式中,策略模式相关的知识点. 1.策略模式定义 策略模式,又叫算法簇模式,就是定义了不同的算法族,并且之间可以互相替换,此模式让算法的变化独立于使用算法的客户.策略模式属于对象的 ...

  7. [Head First设计模式]策略模式

    系列文章 [Head First设计模式]山西面馆中的设计模式——装饰者模式 [Head First设计模式]山西面馆中的设计模式——观察者模式 [Head First设计模式]山西面馆中的设计模式— ...

  8. javascript 设计模式-----策略模式

    在<javascript设计模式>中,作者并没有向我们介绍策略模式,然而它却是一种在开发中十分常见的设计模式.最常见的就是当我们遇到一个复杂的表单验证的时候,常常需要编写一大段的if和el ...

  9. JAVA 设计模式 策略模式

    用途 Title 它定义了算法家族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化,不会影响到使用算法的客户. 策略模式是一种行为型模式. 结构

  10. PHP设计模式-策略模式 转

    策略模式(Strategy Pattern) 策略模式是对象的行为模式,用意是对一组算法的封装.动态的选择需要的算法并使用. 策略模式指的是程序中涉及决策控制的一种模式.策略模式功能非常强大,因为这个 ...

随机推荐

  1. Vim step by step

    @1: VIM中非常迷人的功能: D------->从当前位置开始删除,直到当前行结束 cw------->修改游标所在的单词,修改范围从游标位置到单词结尾. 一个替换一个用r,一个替换多 ...

  2. quick-cocos2d-x + Lua 开发

    quick-cocos2d-x + Lua 开发      quick-cocos2d-x + Lua 开发 首页在Eclipse中搭建quick-cocos2d-x的lua开发环境. 1. 首先需要 ...

  3. [笔记] 基于nvidia/cuda的深度学习基础镜像构建流程

    基于NVidia开源的nvidia/cuda image,构建适用于DeepLearning的基础image. 思路就是先把常用的东西都塞进去,再装某个框架就省事儿了. 为了体验重装系统的乐趣,所以采 ...

  4. java 并发——内置锁

    坚持学习,总会有一些不一样的东西. 一.由单例模式引入 引用一下百度百科的定义-- 线程安全是多线程编程时的计算机程序代码中的一个概念.在拥有共享数据的多条线程并行执行的程序中,线程安全的代码会通过同 ...

  5. 2-AMD

    诞生背景1.随着前端逻辑越来越多,项目越来越大,开发大型项目就必须分模块开发2.一切都那么完美,在NodeJs实现后,当人们开始热情的打算把这种实现也用于浏览器时,却发现并不适合.NodeJS应用加载 ...

  6. mysql时间戳转换成可读时间格式

    代码: SELECT FROM_UNIXTIME(1234567890, '%Y-%m-%d %H:%i:%S') 附:在mysql中,一个时间字段的存储类型是int(11),怎么转化成字符类型,比方 ...

  7. 利用page_source抓取网页中的URL,进行链接测试

    selenium的page_source方法可以获取到页面源码,下面就把它应用到链接测试中. # coding:utf-8 __author__ = 'helen' import re,request ...

  8. 【android】 如何把gif图片下载到本地

    以上图片大家可以看到,虽然是个jpg格式的文件,但是本质上是个动图. 但是发现在咱的图片模块下,本地存储的图片只有一帧,问题出在哪里呢? http获取到的byte[]数据是没问题的 断点跟踪了下,发现 ...

  9. javascript 理解对象--- 属性类型

    ECMA-262 把对象定义为:无序属性的集合,其属性可以包含基本值.对象或者函数: var Person = { name:"wsc", age :"25", ...

  10. Zookeeper环境安装

    源码包下载: http://archive.apache.org/dist/zookeeper/zookeeper-3.4.10 集群环境: master 192.168.1.99 slave1 19 ...