策略模式

策略模式是将共同行为(函数)抽象成接口
这里使用工厂方法创建策略对象使用策略模式
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;
}
原文地址:https://www.cnblogs.com/kuikuitage/p/10989797.html