文档章节

策略模式

首席吹牛官
 首席吹牛官
发布于 2015/05/22 12:56
字数 382
阅读 21
收藏 0

             策略模式定义了一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换。策略模式让算法独立于使用它的客户而独立变化。
            策略模式在应用时,是根据不同的使用情况动态的选择使用的算法,对于客户来说,提供了很好的可扩展性和封闭性。
             
                  下面是代码示例:
                  

#ifndef STRATEGY_H
#define STRATEGY_H
#include <iostream>
class Strategy//策略基类
{
public:
    Strategy();
    virtual ~Strategy(){std::cout << "~~\n";}
    virtual void fun() = 0;
};
#endif // STRATEGY_H
#include "strategy.h"
Strategy::Strategy()
{
}
#ifndef STRATEGYA_H
#define STRATEGYA_H
#include "strategy.h"
class StrategyA : public Strategy
{
public:
    StrategyA();
    ~StrategyA(){}
    void fun();
};
#endif // STRATEGYA_H
#include "strategya.h"
StrategyA::StrategyA()
{
}
void StrategyA::fun()
{
    std::cout << "策略A!走为上" <<'\n';
}
#ifndef STRATEGYB_H
#define STRATEGYB_H
#include "strategy.h"
class StrategyB : public Strategy
{
public:
    StrategyB();
    ~StrategyB(){}
    void fun();
};
#endif // STRATEGYB_H
#include "strategyb.h"
StrategyB::StrategyB()
{
}
void StrategyB::fun()
{
    std::cout << "策略B!老婆天下第一,逛街去" <<'\n';
}
#ifndef STRATEGYC_H
#define STRATEGYC_H
#include "strategy.h"
class StrategyC : public Strategy
{
public:
    StrategyC();
    ~StrategyC(){}
    void fun();
};
#endif // STRATEGYC_H
#include "strategyc.h"
StrategyC::StrategyC()
{
}
void StrategyC::fun()
{
    std::cout << "策略C!金蝉脱壳" <<'\n';
}
#ifndef CONTEXT_H
#define CONTEXT_H
#include "strategy.h"
class Context//应用的上下文类
{
public:
    Context();
    Context(Strategy *p);
    ~Context(){delete p_stratery;}
    void setStratery(Strategy *p) {delete p_stratery;p_stratery = p;}
    void useStratery() const {if(p_stratery != 0)p_stratery->fun();}
private:
    Strategy *p_stratery;
};
#endif // CONTEXT_H
#include "context.h"
Context::Context():p_stratery(0)
{
}
Context::Context(Strategy *p):p_stratery(p)
{
}
#include <iostream>
using namespace std;
#include "context.h"
#include "strategya.h"
#include "strategyb.h"
#include "strategyc.h"
int main()
{
    cout << "老班让加班!策略A..." << '\n';
    Context me(new StrategyA);
    me.useStratery();
    cout << "老婆让逛街!策略B..." << '\n';
    me.setStratery(new StrategyB);
    me.useStratery();
    cout << "兄弟叫喝酒!可老婆让早点回家!策略C..." << '\n';
    me.setStratery(new StrategyC);
    me.useStratery();
    return 0;
}
最后来张运行图

© 著作权归作者所有

上一篇: 策略模式
下一篇: 策略模式
首席吹牛官
粉丝 9
博文 368
码字总数 191938
作品 0
闵行
程序员
私信 提问
【设计模式笔记】(十六)- 代理模式

一、简述 代理模式(Proxy Pattern),为其他对象提供一个代理,并由代理对象控制原有对象的引用;也称为委托模式。 其实代理模式无论是在日常开发还是设计模式中,基本随处可见,中介者模式中...

MrTrying
2018/06/24
0
0
设计模式已经陨落了?

你现在是坐在一个程序员旁边吗?如果是的话,那么在你读下面的段落之前,有一个简单的实验。让他们到一边去,问问他们两个问题并记录下答案。首先问他们“什么是设计模式?”然后再问“说出你...

oschina
2014/03/11
9.5K
69
《PHP设计模式大全》系列分享专栏

《PHP设计模式大全》已整理成PDF文档,点击可直接下载至本地查阅 https://www.webfalse.com/read/201739.html 文章 php设计模式介绍之编程惯用法第1/3页 php设计模式介绍之值对象模式第1/5页...

kaixin_code
2018/11/06
183
0
设计模式梳理(一)

设计模式梳理(一) 总体来说设计模式分为三大类: @案例源码地址:https://gitlab.com/lxqxsyu/DisgnPattern 创建型模式 简单工厂模式 工厂类是整个模式的关键。它包含必要的判断逻辑,能够...

lxq_xsyu
2017/11/02
0
0
JavaScript 的一些设计模式

设计模式的定义:在面向对象软件设计过程中针对特定问题的简洁而优雅的解决方案 设计模式是前人解决某个特定场景下对而总结出来的一些解决方案。可能刚开始接触编程还没有什么经验的时候,会...

格西南
08/20
0
0

没有更多内容

加载失败,请刷新页面

加载更多

最简单的获取相机拍照的图片

  import android.content.Intent;import android.graphics.Bitmap;import android.os.Bundle;import android.os.Environment;import android.provider.MediaStore;import andr......

MrLins
今天
4
0
说好不哭!数据可视化深度干货,前端开发下一个涨薪点在这里~

随着互联网在各行各业的影响不断深入,数据规模越来越大,各企业也越来越重视数据的价值。作为一家专业的数据智能公司,个推从消息推送服务起家,经过多年的持续耕耘,积累沉淀了海量数据,在...

个推
今天
8
0
第三方支付-返回与回调注意事项

不管是支付宝,微信,还是其它第三方支付,第四方支付,支付机构服务商只要涉及到钱的交易都要进行如下校验,全部成功了才视为成功订单 1.http请求是否成功 2.校验商户号 3.校验订单号及状态...

Shingfi
今天
4
0
简述Java内存分配和回收策略以及Minor GC 和 Major GC(Full GC)

内存分配: 1. 栈区:栈可分为Java虚拟机和本地方法栈 2. 堆区:堆被所有线程共享,在虚拟机启动时创建,是唯一的目的是存放对象实例,是gc的主要区域。通常可分为两个区块年轻代和年老代。更...

DustinChan
今天
6
0
Excel插入批注:可在批注插入文字、形状、图片

1.批注一直显示:审阅选项卡-------->勾选显示批注选项: 2.插入批注快捷键:Shift+F2 组合键 3.在批注中插入图片:鼠标右键点击批注框的小圆点【重点不可以在批注文本框内点击】----->调出批...

东方墨天
今天
6
1

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部