策略模式:
它定义了算法家族,分别封装起来,让它们之间可以相互替换,此模式让算法的变化,不会影响到使用的客户。
// Strategy.cpp: 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include<iostream>
using namespace std;
class Strategy
{
public:
virtual void Algorithm() = 0;
};
class ConcreteStrategyA : public Strategy
{
void Algorithm()
{
cout << "算法A实现" << endl;
}
};
class ConcreteStrategyB : public Strategy
{
void Algorithm()
{
cout << "算法B实现" << endl;
}
};
class ConcreteStrategyC : public Strategy
{
void Algorithm()
{
cout << "算法C实现" << endl;
}
};
//上下文
class Context
{
private:
Strategy *strategy;
public:
Context(Strategy *strategy)
{
this->strategy = strategy;
}
void ContextAlgothrim()
{
this->strategy->Algorithm();
}
};
int main()
{
Context *context;
//A
context = new Context(new ConcreteStrategyA());
context->ContextAlgothrim();
//B
context = new Context(new ConcreteStrategyB());
context->ContextAlgothrim();
//C
context = new Context(new ConcreteStrategyC());
context->ContextAlgothrim();
return 0;
}
应用场景:在不同时间应用不同的业务规则
注意与简单工厂模式的区别。