3_1 StrategyMode.cpp 策略模式
// 定义:定义一系列的算法,把他们一个个封装起来,并且使他们
// 可以相互替换,该模式使得算法独立于客户端的变化
//
// 模式举例:小明旅行去昆明,采用交通工具可以是飞机,高铁,火车
//
// 模式特点:
//
//#include<iostream>
using namespace std;class Strategy
{
public:virtual void algorithmInterface()=0;
};class ConcreteStrategyA : public Strategy
{
public:virtual void algorithmInterface(){cout << "run algorithm A"<<endl;}
};class ConcreteStrategyB : public Strategy
{
public:virtual void algorithmInterface(){cout << "run algorithm B"<<endl;}
};class Context
{
public:Context(Strategy * strategy){m_strategy = strategy;}void runStrategy(){m_strategy->algorithmInterface();}protected:Strategy * m_strategy;
};int main()
{Context * context = new Context(new ConcreteStrategyA);context->runStrategy();return 0;
}
3_1 StrategyMode.cpp 策略模式相关推荐
- 设计模式之策略模式(Strategy)摘录
23种GOF设计模式一般分为三大类:创建型模式.结构型模式.行为模式. 创建型模式抽象了实例化过程,它们帮助一个系统独立于如何创建.组合和表示它的那些对象.一个类创建型模式使用继承改变被实例化的类,而 ...
- 【设计模式】 模式PK:策略模式VS状态模式
1.概述 行为类设计模式中,状态模式和策略模式是亲兄弟,两者非常相似,我们先看看两者的通用类图,把两者放在一起比较一下. 策略模式(左)和状态模式(右)的通用类图. 两个类图非常相似,都是通过Cont ...
- 策略模式(封装一系列的功能,使之可以相互替换)
策略模式和工厂方法模式很类似(感觉策略模式是工厂方法模式的一部分) 策略模式就是将一系列的功能封装起来(用工厂方法模式封装),使之可以相互替换(C++多态调用),从而使功能更加独立,与客户程序的耦合性 ...
- 设计模式C++实现(2)——策略模式
软件领域中的设计模式为开发人员提供了一种使用专家设计经验的有效途径.设计模式中运用了面向对象编程语言的重要特性:封装.继承.多态,真正领悟设计模式的精髓是可能一个漫长的过程,需要大量实践经验的积累.最 ...
- 设计模式C++实现 —— 策略模式
策略模式是指定义一系列的算法,把它们一个个封装起来,并且使它们可相互替换.本模式使得算法可独立于使用它的客户而变化.也就是说这些算法所完成的功能一样,对外的接口一样,只是各自实现上存在差异.用策略模式 ...
- C++设计模式-使用Qt框架模拟策略模式(Strategy)+简单工厂实现商场促销
商城促销: 1.简单工厂模式:客户端认识两个类,CashSuper与CashFactory 2.简单工厂模式 + 策略模式:客户端只要认识CashContext就可以了,更加降低耦合性 策略模式解析: ...
- C++设计模式-使用Qt框架模拟策略模式(Strategy)商场促销
UML图如下: 如果单使用策略模式,会出现这个问题: 客户端判断使用哪个算法! 这里可以用简单工厂与策略模式结合! 运行截图如下: 源码如下: cash.h #ifndef CASH_H #defin ...
- C++设计模式-策略模式(Strategy)基本轮廓
策略模式(Strategy):它定义了算法家族,分别封装起来,让他们之间可以互相替换,此模式让算法的变化,不会影响到使用算法的客户. context,用一个ConcreteStrategy来配置,维护 ...
- 【C++实现】HeadFirst策略模式设计模式
策略模式定义了算法家族.分别封装起来.让它们之间能够相互替换,此模式让算法的变化独立于使用算法的客户. Head First设计模式中介绍策略模式时以Duck类作为样例.当中用flyBehavior和 ...
最新文章
- R语言均匀分布函数uniform Distribution(dunif, punif, qunif runif)实战
- 已知等势面如何画电场线_线段的三等分点怎么画?有多少画法?
- 《深入理解java虚拟机》学习笔记四/垃圾收集器GC学习/一
- win10搜索计算机中所有excel,windows10系统下怎样使用excel进行高级筛选
- 使用R画桑基图(流程图)
- React相关资源推荐
- VC的MySQL编程
- 特殊教育学校计算机教学计划,2021年特殊教育学校教学计划
- xxx is not in the sudoers file.This incident will be reported.
- php 调用模板,调用模板
- java.io.Serializable 序列化问题【原】
- prettyping.sh: ping 之美
- python高阶函数(三分钟读懂)
- 超级简洁的xml解析框架:TBXML
- linux常见命令用法之(一)
- Mac上最好的白噪音软件:Noizio for Mac
- EPLAN 2.7 WIN 10 X64安装说明
- 电子料盘 电容 物料标识识别
- apple tv 开发_如何在Apple TV上重新排列,添加和删除频道
- vue支付项目-APP支付宝支付功能