#pragma once
//抽象算法类
class CCashSuper
{
public:
CCashSuper(void);
~CCashSuper(void);
virtual double AlgorithmInterface(double sum){return 0;}
};
//正常收费算法类
class CashNormal : public CCashSuper
{
virtual double AlgorithmInterface(double sum);
};
//打折算法类
class CashRebate : public CCashSuper
{
virtual double AlgorithmInterface(double sum);
};
//返现算法类
class CashReturn : public CCashSuper
{
virtual double AlgorithmInterface(double sum);
};
class CashContext
{
public:
CashContext(CString strtype);
virtual ~CashContext();
double GetResult(double sum);
private:
CCashSuper *m_pCashSuper;
};
#include "StdAfx.h"
#include "CashSuper.h"
CCashSuper::CCashSuper(void)
{
}
CCashSuper::~CCashSuper(void)
{
}
//算法类实现
double CashNormal::AlgorithmInterface(double sum)
{
return sum;
}
double CashRebate::AlgorithmInterface(double sum)
{
return 0.8 * sum;
}
double CashReturn::AlgorithmInterface(double sum)
{
return sum > 300 ? sum-100 : sum;
}
//CashContext工厂
CashContext::CashContext(CString strType)
{
if (_tcscmp(strType, _T("正常收费")) == 0)
{
m_pCashSuper = new CashNormal();
}
else if(_tcscmp(strType, _T("打8折")) == 0)
{
m_pCashSuper = new CashRebate();
}
else if(_tcscmp(strType, _T("满300送100")) == 0)
{
m_pCashSuper = new CashReturn();
}
}
double CashContext::GetResult(double sum)
{
return m_pCashSuper->AlgorithmInterface(sum);
}
CashContext::~CashContext()
{
delete m_pCashSuper;
m_pCashSuper = NULL;
}
工厂模式策略模式结合使用
策略模式是定义一系列算法的方法,它可以用相同的方式调用所有的算法,减少各种算法类与功能类的耦合;策略模式就是用来封装算法的。
参考《大话设计模式》