大话设计模式--策略模式 strategy -- C++实现实例
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++实现实例的更多相关文章
- linkin大话设计模式--策略模式
linkin大话设计模式--策略模式 Strategy [ˈstrætədʒi] 策略 策略模式用于封装系列的算法,这些算法通常被封装在一个称为Context的类中,客户端程序可以自由的选择任何一种 ...
- [.net 面向对象程序设计深入](26)实战设计模式——策略模式 Strategy (行为型)
[.net 面向对象程序设计深入](26)实战设计模式——策略模式 Strategy (行为型) 1,策略模式定义 策略模式定义了一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换.策略模 ...
- 设计模式--策略模式(strategy)
1.策略模式(strategy ['strætədʒi]) 我的理解是:方案候选模式 (反正关键就是有很多的候选,哈哈) 看了很多例子,都是在说鸭子的,那个例子很好,在这里可以看 他们生产鸭子,我们就 ...
- 设计模式 - 策略模式(Strategy Pattern) 具体解释
策略模式(Strategy Pattern) 具体解释 本文地址: http://blog.csdn.net/caroline_wendy/article/details/26577879 本文版权全 ...
- 设计模式——策略模式(Strategy Pattern)
写在前面: 直接将书中的例子用来作为记录自己学习的成果,不知道这样好不好,如果给原作者带来什么不利的影响不妨告知一声,我及时删掉. UML图: 抽象策略:Strategy package com.cn ...
- java设计模式 策略模式Strategy
本章讲述java设计模式中,策略模式相关的知识点. 1.策略模式定义 策略模式,又叫算法簇模式,就是定义了不同的算法族,并且之间可以互相替换,此模式让算法的变化独立于使用算法的客户.策略模式属于对象的 ...
- 设计模式-策略模式Strategy以及消灭if else
概述 如果在开发过程中,出现大量的if else或者switch case 语句,如果这些语句块中的代码并不是包含业务逻辑,只是单纯的分流方法,那么,每一个语句块中都是一个算法或者叫策略. 背景 比如 ...
- 24种设计模式-策略模式(Strategy Pattern)
一.优点: 1. 策略模式提供了管理相关的算法族的办法.策略类的等级结构定义了一个算法或行为族.恰当使用继承可以把公共的代码转移到父类里面,从而避免重复的代码. 2. 策略模式提供了可以替换继承关系的 ...
- 架构师修炼之设计模式 - 策略模式(Strategy) 【Python与C#实现】
程序员,我为你祝福 愿你有一个灿烂的前程 愿你有情人终成眷属 愿你在尘世获得幸福 我只想成为架构师,走遍江湖! 目录 模式定义 模式分类 模式结构 实例(C#与Python版) 优点 缺点 使用场景 ...
随机推荐
- 不同手机根据坐标计算控件、图片的像素,px 与 dp, sp换算公式?
参考该帖子:http://www.cnblogs.com/bluestorm/p/3640786.html PPI = Pixels per inch,每英寸上的像素数,即 "像素密度&qu ...
- Quartz.Net - Lesson2: 任务和触发器
Lesson 2: 任务和触发器 本系列文章是官方3.x文档的翻译,原文地址:https://www.quartz-scheduler.net/documentation/quartz-3.x/tut ...
- 【LeetCode-面试算法经典-Java实现】【118-Pascal's Triangle(帕斯卡三角形)】
[118-Pascal's Triangle(帕斯卡三角形(杨辉三角))] [LeetCode-面试算法经典-Java实现][全部题目文件夹索引] 原题 Given numRows, generate ...
- Python鸡汤
标准库 很正确 外部库 有一些风险,可能有bug,可能文档不全,可能长时间未更新. ipython 1 pip 这应该是安装Python后第一个需要的命令 pip install -i -i, --i ...
- 更改Mysql 密码的4种方法(转)
原文:http://www.jb51.net/article/39454.htm 方法1: 用SET PASSWORD命令 首先登录MySQL. 格式:mysql> set password f ...
- chattr
chattr 功能:设置文件隐藏属性常用参数:+ 增加某个特殊权限,其他原本存在的参数不动- 删除某个特殊权限,其他原本存在的参数不动= 设置一定,且仅有后面接的参数 i 文件 ...
- Windows下搭建React Native Android开发环境
准备工作 安装JDK 安装Android SDK 安装C++环境 安装node.js 安装react-native命令行工具 创建项目 运行packager 运行模拟器 安卓运行 安卓调试 安装JDK ...
- poj3292
Semi-prime H-numbers Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 8677 Accepted: 3 ...
- mysql导出数据或结构
导出整个数据库结构和数据 $ mysqldump -h localhost -uroot -p123456 database > dump.sql 导出单个数据表结构和数据 $ mysqldum ...
- ASP连接数据库SQLServer
Set conn=Server.CreateObject("adodb.connection")Set conn1=Server.CreateObject("adodb. ...