概念:
行为模式之一,它对一系列的算法或实现进行封装,为所有算法或实现定义统一接口,并通过继承该抽象接口对所有的实现加以封装和实现,
具体的实现选择交由客户端决定(策略)。Strategy模式主要用来平滑地处理算法或各种实现的切换。
结构:
Strategy: 各种实现的抽象基类。
ConcreteStrategy:各种实现的具体子类
Context: 策略的外壳,或者说策略的容器类。根据不同策略执行不同的行为。
适用:
一般用于一组实现,用其进行封装后,当调用实现后方便于各个实现进行相互调换。
实例:
#include "stdafx.h"
#include <iostream>
using namespace std;
class Strategy
{
public:
virtual void UseWays() = 0;
};
class Way1 : public Strategy
{
public:
virtual void UseWays()
{
cout << "方式1" << endl;
}
};
class Way2 : public Strategy
{
public:
virtual void UseWays()
{
cout << "方式2" << endl;
}
};
class Context
{
public:
Context(Strategy *strategy)
{
p = strategy;
}
void Operator()//操作
{
p->UseWays();
}
private:
Strategy *p;
};
void main()
{
Strategy *strategy = NULL;
Context *ctx = NULL;
strategy = new Way1;//在这儿可以动态决定使用的方法
ctx = new Context(strategy);
ctx->Operator();
delete strategy;
delete ctx;
system("pause");
return ;
}