strategy.h
#pragma once
#include <QDebug>
class AbstractStrategy
{
public:
AbstractStrategy();
virtual void operate() = 0;
};
class CCardMethod1 : public AbstractStrategy
{
public:
CCardMethod1(){};
~CCardMethod1(){};
public:
void operate();
};
class CCardMethod2 : public AbstractStrategy
{
public:
CCardMethod2(){};
~CCardMethod2(){};
public:
void operate();
};
class CCardMethod3 : public AbstractStrategy
{
public:
CCardMethod3(){};
~CCardMethod3(){};
public:
void operate();
};
class CContext
{
public:
CContext(AbstractStrategy *strategy);
void useTool()
{
m_strategy->operate();
}
private:
AbstractStrategy *m_strategy;
};
strategy.cpp
#include "strategy.h"
AbstractStrategy::AbstractStrategy()
{
}
void CCardMethod1::operate()
{
qDebug() << "use plane";
}
void CCardMethod2::operate()
{
qDebug() << "use car";
}
void CCardMethod3::operate()
{
qDebug() << "use horse";
}
CContext::CContext(AbstractStrategy *strategy)
:m_strategy(strategy)
{
}
main.cpp
#include <QApplication>
#include "strategy.h"
int main(int argc,char **argv)
{
CContext *pMethod1 = new CContext(new CCardMethod1());
pMethod1->useTool();
CContext *pMethod2 = new CContext(new CCardMethod2());
pMethod2->useTool();
CContext *pMethod3 = new CContext(new CCardMethod3());
pMethod3->useTool();
delete pMethod1 ;
delete pMethod2 ;
delete pMethod3;
QApplication app(argc,argv);
return app.exec();
}
UML图: