无论是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 (转载请注明出处)