博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
策略模式
阅读量:6608 次
发布时间:2019-06-24

本文共 2112 字,大约阅读时间需要 7 分钟。

hot3.png

             策略模式定义了一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换。策略模式让算法独立于使用它的客户而独立变化。

            策略模式在应用时,是根据不同的使用情况动态的选择使用的算法,对于客户来说,提供了很好的可扩展性和封闭性。
             
                  下面是代码示例:
                  

#ifndef STRATEGY_H
#define STRATEGY_H
 
#include 
 
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 
 
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;
}
 
 
最后来张运行图
 

转载于:https://my.oschina.net/u/854744/blog/418180

你可能感兴趣的文章
微信支付现金红包接口
查看>>
嵌入式 详解udev
查看>>
《C程序员:从校园到职场》出版预告(2):从“百花齐放”到“一枝独秀”
查看>>
Network Monitor 查询命令和MySQL命令
查看>>
好“戏”刚刚开幕 云计算逐步被认可
查看>>
3G关闭倒计时引发全网通换机潮?
查看>>
《深入理解LLVM》第一章 LLVM简介
查看>>
阿里云FPGA云服务器(FaaS) Python SDK正式发布啦!
查看>>
《中国人工智能学会通讯》——8.43 基于缺陷标注挖掘软件缺陷
查看>>
玉树市建成青海省藏区唯一的高原智慧城市
查看>>
云安全:这也是需要花大钱去建设的部分
查看>>
LinkedIn文本分析平台:主题挖掘的四大技术步骤
查看>>
《HTML 5+CSS 3入门经典》——1.5 习题
查看>>
今天,就要革“办公室IT”的命
查看>>
以全局产业观领航智慧城市建设
查看>>
Intel 18核酷睿i9因故延期到明年:AMD Ryzen反超
查看>>
5G网络不止能1秒下一部电影,它还能够…
查看>>
英特尔:McAfee将剥离出去独立运营
查看>>
中国电信集采终端6700万部 金额达1070亿元
查看>>
2016年的十个数据中心故事
查看>>