GOOD:客户端只需访问Context类,而不用知道其它任何类信息,实现了低耦合。
//策略基类
class COperation
{
protected:
int m_nFirst;
int m_nSecond;
public:
virtual double GetResult()
{
return 0;
}
};
//策略加法类
class AddOperation : public COperation
{
public:
AddOperation(int num1, int num2)
{
m_nFirst = num1;
m_nSecond = num2;
}
virtual double GetResult()
{
return m_nFirst + m_nSecond;
}
};
//策略减法类
class SubOperation : public COperation
{
public:
SubOperation(int num1, int num2)
{
m_nFirst = num1;
m_nSecond = num2;
}
virtual double GetResult()
{
return m_nFirst - m_nSecond;
}
};
class Context
{
private:
COperation *op;
public:
Context(int num1, int num2, char cType)
{
op = NULL;
switch(cType)
{
case '+':
op = new AddOperation(num1, num2);
break;
case '-':
op = new SubOperation(num1, num2);
break;
}
}
~Context()
{
if(op != NULL)
delete op;
}
double GetResult()
{
return op->GetResult();
}
};
//客户端:
int num1, num2;
cout << "请输入两个数字:";
cin >> num1 >> num2;
char oper;
cout << "请输入操作符:";
cin >> oper;
Context obj(num1, num2, oper);
cout << obj.GetResult() << endl;
return 0;