1 策略模式
它定义了算法家族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化,不会影响到使用算法的用户。
2 例程功能
实现超市收银功能,根据不同的收费模式计算金额。
3 设计思路
不同收费模式分别定义为一个抽象基类CashSuper的子类。使用一个上下文类CashContext管理子类的实现。
4 编程环境
win10 64位+Qt 5.3 +MinGW 4.8.2
5 工程结构
6 设计代码
//cashcontext.h
#ifndef CASHCONTEXT_H
#define CASHCONTEXT_H
#include "cashsuper.h"
#include "cashnormal.h"
#include "cashrebate.h"
#include "cashreturn.h"
class CashContext{
public:
CashContext(char type){
switch(type){
case 'N'://正常模式
pCashSuper=new CashNormal();
break;
case 'D'://打折模式
pCashSuper=new CashRebate(0.8);
break;
case 'R'://返现模式
pCashSuper=new CashReturn(300,100);
break;
}
}
double GetResult(double money){
//使用指向子类的基类指针调用虚函数,实现多态!
return pCashSuper->acceptCash(money);
}
private:
CashSuper* pCashSuper;
};
#endif // CASHCONTEXT_H
//main.cpp
#include <iostream>
#include "cashcontext.h"
int main()
{
CashContext obj_cash_context('D');//打折模式
std::cout<<"The Price is: "<<obj_cash_context.GetResult(300)<<std::endl;
}
其他类的设计请参见上一篇文章代码