設計模式學習2--策略模式(商場管理軟件)

#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;
}
工廠模式策略模式結合使用

策略模式是定義一系列算法的方法,它可以用相同的方式調用所有的算法,減少各種算法類與功能類的耦合;策略模式就是用來封裝算法的。


參考《大話設計模式》

發佈了35 篇原創文章 · 獲贊 3 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章