如何管理网站内容,中国企业网查询系统官网,宁波seo自然优化技术,互联网营销师考试时间策略模式 序言理解源码 序言
还是参考的菜鸟教程#xff0c;会C的还是看C的方式来得舒服。
.
理解
使用符合UML规范的便于理解和回忆#xff0c;接口其实就是普通的基类 .
源码
strategy.h
/// 策略
class Strategy
{
public:virtual ~Strategy();/*** brief 计算* p… 策略模式 序言理解源码 序言
还是参考的菜鸟教程会C的还是看C的方式来得舒服。
.
理解
使用符合UML规范的便于理解和回忆接口其实就是普通的基类 .
源码
strategy.h
/// 策略
class Strategy
{
public:virtual ~Strategy();/*** brief 计算* param num1 计算数值* param num2 被计算数值* return */virtual int operation(const int num1, const int num2) 0;
};/// 加策略
class AddOperation : public Strategy
{
public:/*** brief 加计算* param num1 计算数值* param num2 被计算数值* return */int operation(const int num1, const int num2) override;
};/// 减策略
class SubtractOperation : public Strategy
{
public:/*** brief 减计算* param num1 计算数值* param num2 被计算数值* return */int operation(const int num1, const int num2) override;
};/// 上下文
class Context
{
public:/*** brief 构造一个策略的上下文* param strategy 策略对象*/explicit Context(Strategy *strategy);~Context();/*** brief 计算* param num1 计算数值* param num2 被计算数值* return */int operation(const int num1, const int num2);private:/// 所拥有的策略Strategy *strategy nullptr;
};. strategy.cpp
Strategy::~Strategy()
{}int AddOperation::operation(const int num1, const int num2)
{return num1 num2;
}int SubtractOperation::operation(const int num1, const int num2)
{return num1 - num2;
}Context::Context(Strategy *strategy): strategy(strategy)
{}Context::~Context()
{if (strategy)delete strategy;
}int Context::operation(const int num1, const int num2)
{if (strategy){return strategy-operation(num1, num2);}return INT_MIN;
}. 使用的地方
std::shared_ptr Context context(new Context(new AddOperation));
std::cout context-operation(10, 5) std::endl;context.reset(new Context(new SubtractOperation));
std::cout context-operation(10, 5) std::endl;不同策略则生成不同的对象给ContextContext会根据其拥有的策略进行运算。