策略模式是将共同行为(函数)抽象成接口
这里使用工厂方法创建策略对象使用策略模式
strategyFactory.h
#include "strategy.h"
#pragma once
class IStrategyFactory
{
public:
virtual IStrategy* CreateStrategy() = 0;
virtual ~IStrategyFactory(){}
};
class CTextStrategyFactory:public IStrategyFactory
{
public:
IStrategy* CreateStrategy();
virtual ~CTextStrategyFactory(){}
};
class CPicStrategyFactory:public IStrategyFactory
{
public:
IStrategy* CreateStrategy();
virtual ~CPicStrategyFactory(){}
};
strategyFactory.cpp
#include "strategyFactory.h"
#include "strategy.h"
IStrategy* CTextStrategyFactory::CreateStrategy()
{
return new CTextStrategy();
}
IStrategy* CPicStrategyFactory::CreateStrategy()
{
return new CPicStrategy();
}
strategy.h
#pragma once
class IStrategy
{
public:
virtual ~IStrategy(){}
virtual void Split() = 0;
};
class CTextStrategy:public IStrategy
{
public:
void Split();
virtual ~CTextStrategy(){}
};
class CPicStrategy:public IStrategy
{
public:
void Split();
virtual ~CPicStrategy(){}
};
strategy.cpp
#include <iostream>
#include "strategy.h"
using namespace std;
void CTextStrategy::Split()
{
cout << "CTextStrategy split" << endl;
}
void CPicStrategy::Split()
{
cout << "CPicStrategy split" << endl;
}
main.cpp
#include <cstdio>
#include "strategy.h"
#include "strategyFactory.h"
using namespace std;
class CTest
{
public:
IStrategyFactory* m_PFactory;
IStrategy* m_Pstrategy;
~CTest(){if(NULL != m_Pstrategy)delete m_Pstrategy;}
CTest(IStrategyFactory* factory):m_PFactory(factory)
{
m_Pstrategy = factory->CreateStrategy();
}
void split()
{
m_Pstrategy->Split();
}
};
int main()
{
CTextStrategyFactory TextStrategy;
CTest test1(&TextStrategy);
test1.split();
CPicStrategyFactory PicStrategy;
CTest test2(&PicStrategy);
test2.split();
return 0;
}