简介:一个策略对应一个锦囊;当用的时候,找到这个锦囊,从锦囊里拿出策略来使用。
注意:锦囊只是简单的装载和调用策略,锦囊里没有逻辑。策略会有更大的自主权,运行更多的逻辑。
实现:策略作为一个父类,具体的策略行为在子类中实现;锦囊作为具体策略的容器,在其构造函数中传入我们具体的策略;
1.父类策略
#pragma once
class Strategy
{
public:
Strategy(void);
virtual ~Strategy(void);
virtual void MyStrategy(void) = 0;
private:
};
Strategy::Strategy(void)
{
}
Strategy::~Strategy(void)
{
}
2.策略1《走后门》
#pragma once
#include "Strategy.h"
#include <iostream>
class BackDoor: public Strategy
{
public:
BackDoor(void);
~BackDoor(void);
void MyStrategy(void);
private:
};
BackDoor::BackDoor(void)
{
}
BackDoor::~BackDoor(void)
{
}
void BackDoor::MyStrategy(void)
{
std::cout << "走后门" << std::endl;
}
3.策略2《走绿色通道》
#pragma once
#include"Strategy.h"
#include <iostream>
class GreenPath:public Strategy
{
public:
GreenPath(void);
~GreenPath(void);
void MyStrategy(void);
private:
};
GreenPath::GreenPath(void)
{
}
GreenPath::~GreenPath(void)
{
}
void GreenPath::MyStrategy(void)
{
std::cout << "走绿色通道" << std::endl;
}
4.锦囊
#pragma once
#include "Strategy.h"
class Context
{
public:
Context(Strategy* S);
~Context();
void UseStrategy(void);
private:
Strategy* myStrategy;
};
Context::Context(Strategy* S)
{
this->myStrategy = S;
}
Context::~Context()
{
delete this->myStrategy;
}
void Context::UseStrategy(void)
{
this->myStrategy->MyStrategy();
}
5.主程序
#include "BackDoor.h"
#include "Context.h"
#include "GreenPath.h"
#include "Strategy.h"
#include <iostream>
int main(int argc, char* argv[])
{
Context* p_context;
p_context = new Context(new BackDoor());
p_context->UseStrategy();
p_context = new Context(new GreenPath());
p_context->UseStrategy();
system("pause");
return 0;
}
6.结果