我看设计模式系列(1)--简单工厂模式【设计模式C++实现】

感谢博主:http://dotcpp.javaeye.com/blog/605168

无论是CSDN、博客园或者JAVAEYE,看着很多牛人工作、学习之余写心得写代码,为初学者提供方便。我不是大牛也不是精英。但我也是个过来人。说一说我的一些心得吧。

 

    关于设计模式,《大话设计模式》是我比较喜欢的一本书,不过这本书是C#语法写的例子,不懂C#的C++初学者们很期待能有C++版的源码。我在学习过程中,用C#和C++两种语言实现了本书中的所有例子。并把它放在一个DOC文档里,挂在CSDN上:http://download.csdn.net/source/1136752 ,下载量也算可以。看来学的人还是比较多。最近几天想把它整理一下,放在我的这个新博客里面,自己也顺便复习一下。

 

   关于设计模式的学习,建议先看一下《大话设计模式》和《Head First设计模式》,这两个比较容易入门,然后看经典的软工双雄里面的一本《设计模式》。最后可以看看《重构:改善既有代码的设计》。加上平时的练习和动脑,相信有一天能悟出一些自己独特的心得。

 

  好了,上面说了这么多,进入正题。今天只说一下最简单的简单工厂模式。我相信大家如果看《大话设计模式》的话,很容易明白。毕竟学IT的IQ都不低。放段C++的代码:

Cpp代码

//运算操作基类 class COperation { public: int m_nFirst; int m_nSecond; virtual double GetResult() //返回操作结果 { double dResult=0; return dResult; } }; //加法 class AddOperation : public COperation { public: virtual double GetResult() { return m_nFirst+m_nSecond; } }; //减法 class SubOperation : public COperation { public: virtual double GetResult() { return m_nFirst-m_nSecond; } }; //工厂类,为了方便我用的静态函数 class CCalculatorFactory { public: static COperation* Create(char cOperator); }; COperation* CCalculatorFactory::Create(char cOperator) { COperation *oper; //在C#中可以用反射来取消判断时用的switch,在C++中用什么呢?我觉得是RTTI,后面可以讲到 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_nFirst=a; op->m_nSecond=b; cout<<op->GetResult()<<endl; return 0; }

上面的代码非常简单,请看下面UML图:

我看设计模式系列(1)--简单工厂模式【设计模式C++实现】_第1张图片

 

     简单工厂模式说简单点就是在一个工场类里面,根据输入的不同的条件产生同一类的不同对象,然后根据类的多态性使对象具有多样性。

 

你可能感兴趣的:(我看设计模式系列(1)--简单工厂模式【设计模式C++实现】)