總結兩者的實作代碼差別
-
-
- 簡單工廠模式代碼
- 政策模式代碼
- 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類就好了。