浏览 4070 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2010-03-01
最后修改:2010-05-31
无论是CSDN、博客园或者JAVAEYE,看着很多牛人工作、学习之余写心得写代码,为初学者提供方便。我不是大牛也不是精英。但我也是个过来人。说一说我的一些心得吧。
关于设计模式,《大话设计模式》是我比较喜欢的一本书,不过这本书是C#语法写的例子,不懂C#的C++初学者们很期待能有C++版的源码。我在学习过程中,用C#和C++两种语言实现了本书中的所有例子。并把它放在一个DOC文档里,挂在CSDN上:http://download.csdn.net/source/1136752 ,下载量也算可以。看来学的人还是比较多。最近几天想把它整理一下,放在我的这个新博客里面,自己也顺便复习一下。
关于设计模式的学习,建议先看一下《大话设计模式》和《Head First设计模式》,这两个比较容易入门,然后看经典的软工双雄里面的一本《设计模式》。最后可以看看《重构:改善既有代码的设计》。加上平时的练习和动脑,相信有一天能悟出一些自己独特的心得。
好了,上面说了这么多,进入正题。今天只说一下最简单的简单工厂模式。我相信大家如果看《大话设计模式》的话,很容易明白。毕竟学IT的IQ都不低。放段C++的代码: //运算操作基类 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图:
简单工厂模式说简单点就是在一个工场类里面,根据输入的不同的条件产生同一类的不同对象,然后根据类的多态性使对象具有多样性。
@written by .cpp (转载请注明出处) 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2010-03-16
对于模式这方面的东西,, 我不大懂.. 不过一直有一个疑问: 难道 C语言就不能够实现设计模式之类的吗`?
|
|
返回顶楼 | |
发表时间:2010-04-21
# 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; # } 谁负责delete?哈哈。。。 c++不适合用这样的模式,除非有个好的内存管理框架 |
|
返回顶楼 | |
发表时间:2010-06-02
是啊,谁负责删除哪???
|
|
返回顶楼 | |
发表时间:2010-07-01
zhaoqj518 写道 是啊,谁负责删除哪??? 谁负责创建,由谁负责删除 这里还可以改进一下,将由工厂创建的实例都管理起来,当工厂实例销毁的时候一起销毁。 |
|
返回顶楼 | |