设计模式--策略模式(C++实现)
来源:互联网 发布:日志管理系统java设计 编辑:程序博客网 时间:2024/06/06 20:52
/********************************************************************************************
策略模式:
它对一系列的算法加以封装,为所有算法定义一个抽象的算法接口,
并通过继承该抽象算法接口对所有的算法加以封装和实现,具体的算法选择交由客户端决定(策略)。
Strategy模式主要用来平滑地处理算法的切换 。
适用于:
准备一组算法,并将每一个算法封装起来,使得它们可以互换。
***********************************************************************************************/
#include<iostream>
using namespace std;
class Strategy
{
public:
virtual void discount() = 0;
};
class five : public Strategy
{
public:
virtual void discount()
{ cout << "打5折" << endl;}
};
class six : public Strategy
{
public:
virtual void discount()
{ cout << "打6折" << endl;}
};
class Context
{
public:
Context(Strategy *strategy)
{ this->p = strategy; }
void Operator()
{
p->discount();
}
private:
Strategy *p;
};
void main()
{
Strategy *strategy = new five();//创建具体的算法对象
Context *p = new Context(strategy);//扔向算法目录
p->Operator();//指针指向哪个算法,那么此指针调用的就是谁的算法
delete strategy;
delete p;
Strategy *strategy1 = new six();//创建具体的算法对象
Context *p1 = new Context(strategy1);//扔向算法目录
p1->Operator();//指针指向哪个算法,那么此指针调用的就是谁的算法
delete strategy1;
delete p1;
system("pause");
策略模式:
它对一系列的算法加以封装,为所有算法定义一个抽象的算法接口,
并通过继承该抽象算法接口对所有的算法加以封装和实现,具体的算法选择交由客户端决定(策略)。
Strategy模式主要用来平滑地处理算法的切换 。
适用于:
准备一组算法,并将每一个算法封装起来,使得它们可以互换。
***********************************************************************************************/
#include<iostream>
using namespace std;
class Strategy
{
public:
virtual void discount() = 0;
};
class five : public Strategy
{
public:
virtual void discount()
{ cout << "打5折" << endl;}
};
class six : public Strategy
{
public:
virtual void discount()
{ cout << "打6折" << endl;}
};
class Context
{
public:
Context(Strategy *strategy)
{ this->p = strategy; }
void Operator()
{
p->discount();
}
private:
Strategy *p;
};
void main()
{
Strategy *strategy = new five();//创建具体的算法对象
Context *p = new Context(strategy);//扔向算法目录
p->Operator();//指针指向哪个算法,那么此指针调用的就是谁的算法
delete strategy;
delete p;
Strategy *strategy1 = new six();//创建具体的算法对象
Context *p1 = new Context(strategy1);//扔向算法目录
p1->Operator();//指针指向哪个算法,那么此指针调用的就是谁的算法
delete strategy1;
delete p1;
system("pause");
}
参考:传智播客--王保明
0 0
- 设计模式C++(Strategy策略模式)
- 设计模式C++(Strategy策略模式)
- 设计模式--策略模式(C++实现)
- 设计模式 -- 策略模式 + 简单工程模式(C++)
- 设计模式之策略(PHP实现)
- 设计模式实现(二)---策略模式、策略模式与简单工厂模式结合使用
- 设计模式(策略模式)
- 设计模式(策略模式)
- 设计模式(策略模式)
- 设计模式(策略模式)
- C语言和设计模式(策略模式)
- C语言和设计模式(策略模式)
- C语言和设计模式(策略模式)
- 11.C语言和设计模式(策略模式)
- 设计模式之策略模式(使用C++)
- 16、C语言和设计模式(策略模式)
- C语言和设计模式(策略模式)
- C语言设计模式:策略模式
- 图片的平移拉伸
- 指针问题
- iOS 处理后台返回的json(或NSDictionary)形式字符串
- nodejs(二) 创建第一个应用
- java的项目管理工具maven
- 设计模式--策略模式(C++实现)
- LeetCode算法题目:Longest Consecutive Sequence
- MySQL存储过程及触发器
- 大型网站--负载均衡架构
- Linux 安装
- webpack引用动态资源路径错误的解决方案
- execute、executeUpdate、executeQuery三者的区别(及返回值)
- UIScrollView 的基本使用
- gcd-洛谷P2398 GCD SUM