1. 策略模式:

它定义了算法家族, 分别封装起来,使他们之间可以相互替换,此模式让算法变化, 不会影响到使用算法的客户。

用相同的方法调用不同的算法,减少各种算法类与使用算法类之间的耦合。

实例中策略模式与工厂模式相结合,不同之处在于 main函数的使用体现,

如果用但纯的工厂模式则必须知道两个类, 但是两种模式结合后,客户端只需要知道一个类 context .

另外,工厂模式生产的是具体的算法, 而策略模式则是能通过不同策略调用不同算法,直接获取需要的结果。

实例:

strategy.h 策略基类

#ifndef STRATEGY_H
#define STRATEGY_H class Strategy
{
public:
Strategy();
void virtual AlgorithmInterface();
}; #endif // STRATEGY_H

strategy.cpp

#include "strategy.h"

Strategy::Strategy()
{
} void Strategy::AlgorithmInterface()
{ }

concretestrategy.h 具体策略实现, 省篇幅,写在一起

#ifndef CONCRETESTRATEGY_H
#define CONCRETESTRATEGY_H #include "strategy.h" class ConcreteStrategyA : public Strategy
{
public:
void AlgorithmInterface();
}; class ConcreteStrategyB : public Strategy
{
public:
void AlgorithmInterface();
}; class ConcreteStrategyC : public Strategy
{
public:
void AlgorithmInterface();
}; #endif // CONCRETESTRATEGY_H

concretestrategy.cpp

#include "concretestrategy.h"
#include <stdio.h> void ConcreteStrategyA::AlgorithmInterface()
{
printf("ConcreteStrategyA\n");
} void ConcreteStrategyB::AlgorithmInterface()
{
printf("ConcreteStrategyB\n");
} void ConcreteStrategyC::AlgorithmInterface()
{
printf("ConcreteStrategyC\n");
}

context.h 上下文类

#ifndef CONTEXT_H
#define CONTEXT_H #include "strategy.h"
#include "concretestrategy.h"
#include <string> using namespace std; class Context
{
public:
Context(string type);
Strategy* strategy;
void contextInterFace(); }; #endif // CONTEXT_H

context.cpp

#include "context.h"

Context::Context(string type)
{
if( type == "A" )
strategy = new ConcreteStrategyA();
else if( type == "B" )
strategy = new ConcreteStrategyB();
else if( type == "C" )
strategy = new ConcreteStrategyC();
} void Context::contextInterFace()
{
strategy->AlgorithmInterface();
}

main.cpp

#include <iostream>
#include "context.h" using namespace std; int main()
{
cout << "strategy test!" << endl; Context *context = new Context("C");
context->contextInterFace(); return 0;
}

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

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

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

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

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

  3. 设计模式--策略模式(strategy)

    1.策略模式(strategy ['strætədʒi]) 我的理解是:方案候选模式 (反正关键就是有很多的候选,哈哈) 看了很多例子,都是在说鸭子的,那个例子很好,在这里可以看 他们生产鸭子,我们就 ...

  4. 设计模式 - 策略模式(Strategy Pattern) 具体解释

    策略模式(Strategy Pattern) 具体解释 本文地址: http://blog.csdn.net/caroline_wendy/article/details/26577879 本文版权全 ...

  5. 设计模式——策略模式(Strategy Pattern)

    写在前面: 直接将书中的例子用来作为记录自己学习的成果,不知道这样好不好,如果给原作者带来什么不利的影响不妨告知一声,我及时删掉. UML图: 抽象策略:Strategy package com.cn ...

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

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

  7. 设计模式-策略模式Strategy以及消灭if else

    概述 如果在开发过程中,出现大量的if else或者switch case 语句,如果这些语句块中的代码并不是包含业务逻辑,只是单纯的分流方法,那么,每一个语句块中都是一个算法或者叫策略. 背景 比如 ...

  8. 24种设计模式-策略模式(Strategy Pattern)

    一.优点: 1. 策略模式提供了管理相关的算法族的办法.策略类的等级结构定义了一个算法或行为族.恰当使用继承可以把公共的代码转移到父类里面,从而避免重复的代码. 2. 策略模式提供了可以替换继承关系的 ...

  9. 架构师修炼之设计模式 - 策略模式(Strategy) 【Python与C#实现】

    程序员,我为你祝福 愿你有一个灿烂的前程 愿你有情人终成眷属 愿你在尘世获得幸福 我只想成为架构师,走遍江湖! 目录 模式定义 模式分类 模式结构 实例(C#与Python版) 优点 缺点 使用场景 ...

随机推荐

  1. Git--代码托管/协同开发

    Git--代码托管 我爱写代码,公司写,家里写,如果每天来回带一个U盘拷贝着实麻烦,Git有没有类似于云盘似得东西可以进行数据同步呢?答案肯定是有. GitHub,一个基于Git实现的代码托管的平台, ...

  2. 当客户端提交更新数据请求时,是先写入edits,然后再写入内存的

    http://blog.sina.com.cn/s/blog_6f83c7470101b7d3.html http://blog.csdn.net/slq1023/article/details/49 ...

  3. 如何玩转最新的项目的搭配springmvc+mybatis+Redis+Nginx+tomcat+mysql

    上一次完成nginx+tomcat组合搭配,今天我们就说说,这几个软件在项目中充当的角色: 要想完成这几个软件的组合,我们必须知道和熟悉应用这个框架, 一: Nginx:在项目中大多数作为反向代理服务 ...

  4. html5-补充知识

    原理 html5+开发app的原理大概是这样: html页面负责内容: ui负责页面样式: js负责调用原生app方法. html5 html5这部分负责页面,也就是app中你看到的东西,大概的架构和 ...

  5. obj-c学习笔记

    本文转载至 http://blog.csdn.net/c395565746c/article/details/7573793   当对象经过在dealloc方法处理时,该对象就已经处于已销毁状态,其它 ...

  6. iPhone 和 iPad的ios 开发中 利用 WebViewJavascriptBridge组件,通过 UIWebView 对Html进行双向通讯

    本文转载至 http://blog.csdn.net/remote_roamer/article/details/7261490 WebViewJavascriptBridge 项目的 官网 http ...

  7. winphone 中的指针和手势事件

    注意  有关这些主题的最新概述,请参阅指针事件和手势事件主题. 小心  W3C 指针事件规范自从在 Internet Explorer 10 中实施以来,已经经历了多次修订.此外,截止到 Intern ...

  8. lua(仿类)

    Account = { balance = } function Account:deposit(v) self.balance = self.balance + v end function Acc ...

  9. hdu3579(线性同余方程组)

    Hello Kiki Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total ...

  10. ULN2003A 使用,有坑

    8脚接24V负极 9脚接24V正极 16接24V继电器,再接到24V正极 1-7无论给5V 正 或 负,10-16都不能达到24V,越靠近输入端的输出端电压越大,最大的才11V,最小的2.5V 最后发 ...