策略模式作用
在有多种算法相似的情况下,使用 if…else 所带来的复杂和难以维护。策略模式定义了完成相同工作的算法家族,分别封装起来,让他们之间可以相互转换,使算法的改变不会影响使用算法的客户。这样减少了各种算法和使用算法之间的耦合,由于每个算法都有自己的类,通过自己的接口单独测试,简化了单元测试。
UML模型
构建一个基类CashSuper,cash1,cash2继承该基类,context类用来维护对基类及其子类的引用。
测试代码
#include<iostream>
using namespace std;
class CashSuper
{
public:
CashSuper() {};
~CashSuper() {};
virtual int getvalue() { return 0; };
private:
};
class Cash1:public CashSuper
{
public:
Cash1(int c) { cash = c; };
~Cash1() {};
int getvalue() { return cash; };
private:
int cash=0;
};
class Cash2 :public CashSuper
{
public:
Cash2(int c) { cash = c; };
~Cash2() {};
int getvalue() { return cash*0.8; };
private:
int cash = 0;
};
class Context
{
public:
Context(CashSuper *CS) { m_CS = CS; };
~Context() {};
int GetValue() { return m_CS->getvalue(); };
private:
CashSuper *m_CS;
};
int main()
{
Context *context = new Context(new Cash1(10));
Context *context2 = new Context(new Cash2(10));
cout << context->GetValue() << endl;
cout << context2->GetValue() << endl;
}