#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;
}
工廠模式策略模式結合使用策略模式是定義一系列算法的方法,它可以用相同的方式調用所有的算法,減少各種算法類與功能類的耦合;策略模式就是用來封裝算法的。
參考《大話設計模式》