天天看點

大話設計模式之簡單工廠模式和政策模式(C++實作)

總結兩者的實作代碼差別

      • 簡單工廠模式代碼
      • 政策模式代碼
      • main函數調用
      • 代碼差別

簡單工廠模式代碼

CashSuper* CashFactory::createCashAccept(char type) {   //簡單工廠模式

	CashSuper *cs = NULL;
	switch (type) {
	case 'n':
		cs = new CashNormal();
		break;
	case 'r':
		cs = new CashReturn(300, 100);
		break;
	case 'c':
		cs = new CashRebate(0.8);
		break;
	}
	return cs;
}
           

政策模式代碼

class CashContext   //政策模式
{
private:
	CashSuper *cs;
public:
	CashContext(char type) {
		switch (type) {
		case 'n':
			cs = (new CashNormal());
			break;
		case 'r':
			cs = (new CashReturn(300, 100));
			break;
		case 'c':
			cs = (new CashRebate(0.8));
			break;
		}
	}
	double GetResult(double money) {
		return cs->acceptCash(money);
	}
};
           

main函數調用

int main() //簡單工廠模式
{
    double total = 0.0;
	CashFactory csfactory;
	CashSuper *csuper = csfactory.createCashAccept('r');
	total = csuper->acceptCash(1000);
}
int main() //政策模式
{
    double total=0.0;
	CashContext *cc = new CashContext('r');
	total = cc->GetResult(1000);
}
           

代碼差別

簡單工廠模式隻是用Factory類建立具體的對象,并且傳回對象,并不對對象進行封裝。主函數調用時,還需要建立相應對象去指向簡單工廠模式傳回的對象。

政策模式則使用Context類中的GetResult函數封裝了具有類似功能算法的類。主函數調用時,隻需要建立Context類就好了。

繼續閱讀