设计模式--策略模式C++实现
策略模式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++实现的更多相关文章
- 15. 星际争霸之php设计模式--策略模式
		题记==============================================================================本php设计模式专辑来源于博客(jymo ... 
- [.net 面向对象程序设计深入](24)实战设计模式——策略模式(行为型)
		[.net 面向对象程序设计深入](24)实战设计模式——策略模式(行为型) 1,策略模式定义 策略模式定义了一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换.策略模式让算法独立于使用它 ... 
- linkin大话设计模式--策略模式
		linkin大话设计模式--策略模式 Strategy [ˈstrætədʒi] 策略 策略模式用于封装系列的算法,这些算法通常被封装在一个称为Context的类中,客户端程序可以自由的选择任何一种 ... 
- [.net 面向对象程序设计深入](26)实战设计模式——策略模式 Strategy (行为型)
		[.net 面向对象程序设计深入](26)实战设计模式——策略模式 Strategy (行为型) 1,策略模式定义 策略模式定义了一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换.策略模 ... 
- 设计模式-策略模式(Strategy Model)
		1.概述 在开发过程中常常会遇到类似问题,实现一个功能的时候往往有多种算法/方法(策略),我们可以根据环境的不同来使用不同的算法或策略来实现这一功能. 如在人物比较排序的实现中,我们有 ... 
- java设计模式 策略模式Strategy
		本章讲述java设计模式中,策略模式相关的知识点. 1.策略模式定义 策略模式,又叫算法簇模式,就是定义了不同的算法族,并且之间可以互相替换,此模式让算法的变化独立于使用算法的客户.策略模式属于对象的 ... 
- [Head First设计模式]策略模式
		系列文章 [Head First设计模式]山西面馆中的设计模式——装饰者模式 [Head First设计模式]山西面馆中的设计模式——观察者模式 [Head First设计模式]山西面馆中的设计模式— ... 
- javascript 设计模式-----策略模式
		在<javascript设计模式>中,作者并没有向我们介绍策略模式,然而它却是一种在开发中十分常见的设计模式.最常见的就是当我们遇到一个复杂的表单验证的时候,常常需要编写一大段的if和el ... 
- JAVA 设计模式 策略模式
		用途 Title 它定义了算法家族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化,不会影响到使用算法的客户. 策略模式是一种行为型模式. 结构 
- PHP设计模式-策略模式 转
		策略模式(Strategy Pattern) 策略模式是对象的行为模式,用意是对一组算法的封装.动态的选择需要的算法并使用. 策略模式指的是程序中涉及决策控制的一种模式.策略模式功能非常强大,因为这个 ... 
随机推荐
- 我的第一次NGS分析操作
			部分参考自:生物信息学100个基础问题 —— 番外2: 用Anaconda快速搭建生物信息学分析平台 - 孟浩巍的文章 - 知乎 https://zhuanlan.zhihu.com/p/357114 ... 
- DB_FILE_MULTIBLOCK_READ_COUNT对物理读和IO次数的影响
			当执行SELECT语句时,如果在内存里找不到相应的数据,就会从磁盘读取进而缓存至LRU末端(冷端),这个过程就叫物理读.当相应数据已在内存,就会逻辑读. 物理读是磁盘读,逻辑读是内存读:内存读的速度远 ... 
- Oracle DB 移动数据
			描述移动数据的方式 • 创建和使用目录对象 • 使用SQL*Loader 加载非Oracle DB(或用户文件)中的数据 • 使用外部表并通过与平台无关的文件移动数据 • 说明Oracle 数据泵的 ... 
- java反射之构造方法(三)
			一. 1. 二.获取类的构造方法信息. ######################################################################## 三. 
- Python-argparse-命令行与参数解析
			import argparse import numpy as np import cv2 import os import numpy.random as npr from dface.core.u ... 
- C#如何获取枚举(Enum)变量的值
			using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Enum ... 
- Ubuntu安装dlib后import出现libstdc++.so.6: version `GLIBCXX_3.4.21' not found
			1 问题描述 先安装依赖包cmake,libboost,再安装dlib sudo apt-get install cmake sudo apt-get install libboost-python- ... 
- hdfs启动后进入safe mode,Problem connecting to server
			原创文章:http://blog.csdn.net/renfengjun/article/details/25320043 DN中日志如下: 2017-06-17 06:35:59,242 WARN ... 
- 1 安装企业wiki:confluence
			使用wget下载命令下载文件. 下载成功使用dir可以看到文件目录 [root@localhost usr]# diratlassian-confluence-6.3.1-x64.bin bin ... 
- C++ 第三十三天
			Ⅰ.类成员函数的隐式参数 T *const this . 就是说对于某个类的成员函数 returnType function() 的真实面目其实是这样的 returnType function(T * ... 
