大话设计模式读书笔记——“简单工厂模式”

在这个例子中,我们要写一个简易的控制台计算器。实现的功能的丰富性在其次,最重要的是面向对象思想和简单工厂模式思想的体现。Now,let's begin!!!

 

首先,我们让业务逻辑和界面逻辑分开,让他们之间的耦合度下降,只有分离开,才能达到容易维护或扩展。先来看看抽象出来的运算基类。将GetResult方法设置为virtual,是为了通过多态来实现在子类中实现各自的需求。

 //基类 class COperation { public: int m_nOper1; int m_nOper2; virtual double GetResult() { double m_dResult=0; return m_dResult; } };

加法子类:

//加法 class AddOperation : public COperation { public: virtual double GetResult() { return m_nOper1+m_nOper2; } };

减法子类:

//减法 class SubOperation : public COperation { public: virtual double GetResult() { return m_nOper1-m_nOper2; } };

如果想实现*或/,用户可以随意扩展,这样就体现出了可扩展性。

 

工厂类,用来实例化对象,问题的关键在于,对于到底要实例化谁,将来会不会增加实例化对象,比如增加乘法或除法运算等,这是很容易变化的地方。所以,我们采用一个单独的类来做这个创造实例的过程,这就是传说中的工厂。

 //工厂类 COperation* CCalculatorFactory::Create(char cOperator) { COperation *oper; switch (cOperator) { case '+': oper=new AddOperation(); break; case '-': oper=new SubOperation(); break; default: oper=new AddOperation(); break; } return oper; }

最后,我们写一个客户端,具体的流程看代码吧~

//客户端 int main() { int a,b; cin>>a>>b; COperation * op=CCalculatorFactory::Create('-'); op->m_nOper1=a; op->m_nOper2=b; cout<GetResult()<

你可能感兴趣的:(Design,Patterns,设计模式,读书,class,扩展)