简单工厂模式

作者在 2014-02-06 22:47:08 发布以下内容

计算器的实现:

1)业务逻辑代码

/************************************************
Class: 运算类
Description:  各种运算的父类,提供公共接口
************************************************/
class COperation
{
public:
double m_nFirst;
double m_nSecond;
public:
virtual double GetResult()
{
return 0;
}
};

/************************************************
Class: 加法运算类
Description:  实现两个数相加
************************************************/
class AddOperation : public COperation
{
double GetResult()
{
return m_nFirst + m_nSecond;
}
};
/************************************************
Class: 减法运算类
Description:  实现两个数相减
************************************************/
class SubOperation : public COperation
{
double GetResult()
{
return m_nFirst - m_nSecond;
}
};
/************************************************
Class: 乘法运算类
Description:  实现两个数相乘
************************************************/
class MulOperation : public COperation
{
double GetResult()
{
return m_nFirst * m_nSecond;
}
};
/************************************************
Class: 除法运算类
Description:  实现两个数相除
************************************************/
class DivOperation : public COperation
{
double GetResult()
{
return m_nFirst / m_nSecond;
}
};

/********************************************
Class:  工厂类  

Description:  实现要实例化的对象
********************************************/
class CCalculatorFactory
{
COperation *oper;
public:
CCalculatorFactory();
~CCalculatorFactory();
COperation *CreateOperate(char operate);
};
//选择要初始化的类对象
COperation *CCalculatorFactory::CreateOperate(char operate)
{
switch(operate)
{
case '+':
oper = new AddOperation();
break;
case '-':
oper = new SubOperation();
break;
case '*':
oper = new MulOperation();
break;
case '/':
oper = new DivOperation();
break;
}
return oper;
}
2)界面显示代码

void dispaly(double &Num1, double &Num2, char &ch)
{
cout << "请输入第一个数:" ;
cin >> Num1;
cout << "请输入操作符:" ;
cin >> ch;
cout << "请输入第二个数:" ;
cin >> Num2;
}
void main()
{
double Num1, Num2;
char ch;
dispaly(Num1, Num2, ch);
COperation *op;
    CCalculatorFactory calFactory;
op = calFactory.CreateOperate(ch);
op->m_nFirst = Num1;
op->m_nSecond = Num2;
cout << Num1 << " " << ch << " " << Num2 << " = " << op->GetResult() << endl;
}

        这是利用简单工厂模式写得计算器类,好处是显而易见的:

       1)可扩展性好

       如果要增加功能的话,比如说增加开方,只需要再写一个子类来继承父类COperation,增加工厂类switch分支即可,对其他的运算没有丝毫影响。

      2)可复用性好

      如果你要利用MFC写一个计算器,这个业务逻辑代码可直接复用。

      3)可维护性好

      如果程序出问题了,比如说乘法运算时出错,那么只要去查看并单独测试乘法类那部分代码即可。

      如果你对设计模式有兴趣的话,不妨看看大话设计模式这本书。这本书绝对不是枯燥的,作者诙谐幽默的语言会让你觉得学习也是一件很有趣的事!

参考:大话设计模式

大话设计模式 | 阅读 1461 次
文章评论,共0条
游客请输入验证码