c++设计模式一 策略模式
2017-09-27 14:52
232 查看
不同的情况使用不同的策略:
需要继承的类:istrategy.h文件
#ifndef ISTRATEGY_H
#define ISTRATEGY_H
class IStrategy
{
public:
IStrategy(void){}
virtual ~IStrategy(void){}
virtual void Operate(void) = 0;
};
#endif // ISTRATEGY_H策略1,backdoor.h头文件
#ifndef BACKDOOR_H
#define BACKDOOR_H
#include "istrategy.h"
class CBackDoor :
public IStrategy
{
public:
CBackDoor(void);
~CBackDoor(void);
void Operate(void);
};
#endif // BACKDOOR_H
backdoor.cpp文件
#include "BackDoor.h"
#include <iostream>
using std::cout;
using std::endl;
CBackDoor::CBackDoor(void)
{
}
CBackDoor::~CBackDoor(void)
{
}
void CBackDoor::Operate(void)
{
cout << "找乔国老帮忙,让吴国太给孙权施加压力" << endl;
}策略二,blockenemy.h头文件
#ifndef BLOCKENEMY_H
#define BLOCKENEMY_H
#include "istrategy.h"
class CBlockEnemy :
public IStrategy
{
public:
CBlockEnemy(void);
~CBlockEnemy(void);
void Operate(void);
};
#endif // BLOCKENEMY_H
blockenemy.cpp文件
#include "BlockEnemy.h"
#include <iostream>
using std::cout;
using std::endl;
CBlockEnemy::CBlockEnemy(void)
{
}
CBlockEnemy::~CBlockEnemy(void)
{
}
void CBlockEnemy::Operate()
{
cout << "孙夫人断后,挡住追兵" << endl;
}策略三:givengreenlight.h头文件
#ifndef GIVENGREENLIGHT_H
#define GIVENGREENLIGHT_H
#include "istrategy.h"
class CGivenGreenLight :
public IStrategy
{
public:
CGivenGreenLight(void);
~CGivenGreenLight(void);
void Operate(void);
};
#endif // GIVENGREENLIGHT_H
givengreenlight.cpp文件
#include "GivenGreenLight.h"
#include <iostream>
using std::cout;
using std::endl;
CGivenGreenLight::CGivenGreenLight(void)
{
}
CGivenGreenLight::~CGivenGreenLight(void)
{
}
void CGivenGreenLight::Operate(void)
{
cout << "求吴国太开个绿灯,放行!" << endl;
}策略使用者:context.h头文件
#ifndef CONTEXT_H
#define CONTEXT_H
#include "IStrategy.h"
class CContext
{
public:
CContext(IStrategy *pStrategy);
~CContext(void);
void Operate(void);
private:
IStrategy *m_pStrategy;
};
#endif // CONTEXT_H
context.cpp文件
#include "Context.h"
CContext::CContext(IStrategy *pStrategy)
{
this->m_pStrategy = pStrategy;
}
CContext::~CContext(void)
{
delete this->m_pStrategy;
}
void CContext::Operate(void)
{
this->m_pStrategy->Operate();
}
主函数入口:
#include <QCoreApplication>
#include "Context.h"
#include "BackDoor.h"
#include "GivenGreenLight.h"
#include "BlockEnemy.h"
#include <iostream>
using std::cout;
using std::endl;
int main(int argc, char *argv[])
{
CContext *pContext;
cout << "\14\n\n\n\n\17" << endl;
cout << "----------刚刚到吴国的时候拆第一个----------" << endl;
pContext = new CContext(new CBackDoor());
pContext->Operate();
delete pContext;
cout << "\14\n\n\n\n\17" << endl;
cout << "----------刘备乐不思蜀了,拆第二个了----------" << endl;
pContext = new CContext(new CGivenGreenLight());
pContext->Operate();
delete pContext;
cout << "\14\n\n\n\n\17" << endl;
cout << "----------孙权的小兵追了,咋办?拆第三个----------" << endl;
pContext = new CContext(new CBlockEnemy());
pContext->Operate();
delete pContext;
return 0;
}
qt5.8编译通过:
需要继承的类:istrategy.h文件
#ifndef ISTRATEGY_H
#define ISTRATEGY_H
class IStrategy
{
public:
IStrategy(void){}
virtual ~IStrategy(void){}
virtual void Operate(void) = 0;
};
#endif // ISTRATEGY_H策略1,backdoor.h头文件
#ifndef BACKDOOR_H
#define BACKDOOR_H
#include "istrategy.h"
class CBackDoor :
public IStrategy
{
public:
CBackDoor(void);
~CBackDoor(void);
void Operate(void);
};
#endif // BACKDOOR_H
backdoor.cpp文件
#include "BackDoor.h"
#include <iostream>
using std::cout;
using std::endl;
CBackDoor::CBackDoor(void)
{
}
CBackDoor::~CBackDoor(void)
{
}
void CBackDoor::Operate(void)
{
cout << "找乔国老帮忙,让吴国太给孙权施加压力" << endl;
}策略二,blockenemy.h头文件
#ifndef BLOCKENEMY_H
#define BLOCKENEMY_H
#include "istrategy.h"
class CBlockEnemy :
public IStrategy
{
public:
CBlockEnemy(void);
~CBlockEnemy(void);
void Operate(void);
};
#endif // BLOCKENEMY_H
blockenemy.cpp文件
#include "BlockEnemy.h"
#include <iostream>
using std::cout;
using std::endl;
CBlockEnemy::CBlockEnemy(void)
{
}
CBlockEnemy::~CBlockEnemy(void)
{
}
void CBlockEnemy::Operate()
{
cout << "孙夫人断后,挡住追兵" << endl;
}策略三:givengreenlight.h头文件
#ifndef GIVENGREENLIGHT_H
#define GIVENGREENLIGHT_H
#include "istrategy.h"
class CGivenGreenLight :
public IStrategy
{
public:
CGivenGreenLight(void);
~CGivenGreenLight(void);
void Operate(void);
};
#endif // GIVENGREENLIGHT_H
givengreenlight.cpp文件
#include "GivenGreenLight.h"
#include <iostream>
using std::cout;
using std::endl;
CGivenGreenLight::CGivenGreenLight(void)
{
}
CGivenGreenLight::~CGivenGreenLight(void)
{
}
void CGivenGreenLight::Operate(void)
{
cout << "求吴国太开个绿灯,放行!" << endl;
}策略使用者:context.h头文件
#ifndef CONTEXT_H
#define CONTEXT_H
#include "IStrategy.h"
class CContext
{
public:
CContext(IStrategy *pStrategy);
~CContext(void);
void Operate(void);
private:
IStrategy *m_pStrategy;
};
#endif // CONTEXT_H
context.cpp文件
#include "Context.h"
CContext::CContext(IStrategy *pStrategy)
{
this->m_pStrategy = pStrategy;
}
CContext::~CContext(void)
{
delete this->m_pStrategy;
}
void CContext::Operate(void)
{
this->m_pStrategy->Operate();
}
主函数入口:
#include <QCoreApplication>
#include "Context.h"
#include "BackDoor.h"
#include "GivenGreenLight.h"
#include "BlockEnemy.h"
#include <iostream>
using std::cout;
using std::endl;
int main(int argc, char *argv[])
{
CContext *pContext;
cout << "\14\n\n\n\n\17" << endl;
cout << "----------刚刚到吴国的时候拆第一个----------" << endl;
pContext = new CContext(new CBackDoor());
pContext->Operate();
delete pContext;
cout << "\14\n\n\n\n\17" << endl;
cout << "----------刘备乐不思蜀了,拆第二个了----------" << endl;
pContext = new CContext(new CGivenGreenLight());
pContext->Operate();
delete pContext;
cout << "\14\n\n\n\n\17" << endl;
cout << "----------孙权的小兵追了,咋办?拆第三个----------" << endl;
pContext = new CContext(new CBlockEnemy());
pContext->Operate();
delete pContext;
return 0;
}
qt5.8编译通过:
相关文章推荐
- C++设计模式——策略模式
- 设计模式之策略模式(c++)
- c++设计模式之策略模式
- 设计模式C++实现(2)——策略模式
- 设计模式C++实现(2)——策略模式
- 设计模式C++实现(2)——策略模式
- c++设计模式--策略模式
- 设计模式C++实现(2)——策略模式
- 设计模式之C++实现(二)---策略模式(Strategy)
- 设计模式C++实现——策略模式
- 设计模式-策略模式(c++实现)
- Head First 设计模式 C++实现-Strategy(策略模式)
- 设计模式之策略模式(使用C++)
- C++设计模式之策略模式(Strategy Pattern)
- 设计模式C++实现(2)——策略模式
- 设计模式C++版:第一式策略模式
- C++设计模式之策略模式
- 设计模式C++实现(2)——策略模式
- C++设计模式之策略模式(Strategy)
- 设计模式C++实现--策略模式