`
dotcpp
  • 浏览: 60151 次
  • 性别: Icon_minigender_1
  • 来自: 重庆
社区版块
存档分类
最新评论

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

阅读更多

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

分享到:
评论
4 楼 yaochuanfu 2010-07-01  
zhaoqj518 写道
是啊,谁负责删除哪???

谁负责创建,由谁负责删除

这里还可以改进一下,将由工厂创建的实例都管理起来,当工厂实例销毁的时候一起销毁。
3 楼 zhaoqj518 2010-06-02  
是啊,谁负责删除哪???
2 楼 wandou 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++不适合用这样的模式,除非有个好的内存管理框架
1 楼 zqynux 2010-03-16  
对于模式这方面的东西,, 我不大懂.. 不过一直有一个疑问: 难道 C语言就不能够实现设计模式之类的吗`?

相关推荐

    设计模式精解-GoF-23种设计模式解析--附C++源代码

    C++源代码文件可以帮助你更好地理解如何在实际项目中应用这些模式,通过阅读和分析代码,你可以学习如何在C++中实现这些设计模式,并将它们融入到自己的编程实践中。 总而言之,设计模式是软件开发中的宝贵财富,...

    设计模式精解-GoF 23种设计模式解析附C++实现源码

    ### 设计模式精解——GoF 23种设计模式解析及C++实现源码 #### 引言 设计模式是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。GoF(Gang of Four)所提出的23种设计模式,被认为是面向对象...

    设计模式精解- GoF 23种设计模式解析附C++实现源码

    设计模式精解- GoF 23种设计模式解析附C++实现源码 懂了设计模式,你就懂了面向对象分析和设计(OOA/D)的精要。反之好像也可能成立。道可道,非常道。道不远人,设计模式亦然如此。 一直想把自己的学习经验以及在...

    设计模式专题之(三)抽象工厂模式---设计模式抽象工厂模式示例代码(python--c++)

    设计模式专题之(三)抽象工厂模式---设计模式抽象工厂模式示例代码(python--c++)

    c++设计模式-工厂方法模式

    在标题“c++设计模式-工厂方法模式”中,我们关注的是如何在C++中实现工厂方法这一设计模式。工厂方法模式的核心思想是定义一个创建对象的接口,但让子类决定实例化哪一个类。这样,工厂方法可以使类的实例化过程...

    C++设计模式--基于Qt4开源跨平台开发框架

    《C++设计模式--基于Qt4开源跨平台开发框架》一书主要探讨了如何在C++编程中利用设计模式,并结合Qt4框架进行高效的跨平台应用开发。设计模式是软件工程中的重要概念,它们是经过时间和实践验证的解决特定问题的模板...

    设计模式实例--C++实现

    接下来,让我们看看"常见设计模式的解析和实现(C++)"这个压缩包中的内容。它很可能包含了对各种设计模式的详细解释,以及每种模式在C++中的具体代码示例。例如,可能会有一个关于工厂模式的章节,解释了如何使用静态...

    设计模式精解-GoF23种设计模式解析附C++实现源码

    C++实现源码提供了具体编程环境下的应用实例,帮助读者更好地理解和应用这些设计模式。通过阅读和实践这些源码,开发者可以更深入地掌握如何在实际项目中灵活运用设计模式,提升代码质量和可维护性。

    《大话设计模式》C++实现-design-patterns-cpp.zip

    《大话设计模式》C++实现-design-patterns-cpp

    设计模式精解-GoF 23种设计模式解析附C++实现源码.pdf

    ### 设计模式精解——GoF 23种设计模式解析及C++实现源码 #### 0. 引言 设计模式是软件工程领域的一个重要概念,它提供了一种解决常见问题的方法论。GoF(Gang of Four)所提出的23种设计模式被视为面向对象设计的...

    设计模式详解及c++代码实现

    首先,抽象工厂模式是一种创建型设计模式,它提供一个接口,用于创建一系列相关的或相互依赖的对象,而无需指定它们的具体类。在C++中,抽象工厂通常通过定义一个纯虚函数的基类来实现,子类则实现这些函数,创建...

    C++ 23种设计模式1

    《C++ 23种设计模式1》是关于软件工程中设计模式的深入解析,主要聚焦于C++语言的实现。设计模式是经过时间和实践验证的解决方案,它们针对常见的编程问题提供了一套标准的模板,使得开发者能够更高效地编写可复用、...

    C++设计模式实现--Observe

    **C++设计模式实现——观察者模式(Observe)** 观察者模式,也称为发布-订阅模式或事件监听模式,是软件设计模式中的一种行为模式。它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的...

    设计模式精解-GoF 23种设计模式解析附C++实现源码 完整版

    《设计模式精解-GoF 23种设计模式解析附C++实现源码 完整版》是一份深入探讨软件工程中经典设计模式的重要资料,涵盖了面向对象编程中的核心设计原则和实践。这份资源主要关注GoF(Gang of Four,即《设计模式:可...

    设计模式精解-GoF 23种设计模式解析附C++.pdf

    ### 设计模式精解——GoF 23种设计模式解析及C++实现 #### 0. 引言 设计模式作为面向对象编程的核心组成部分,是软件开发者在长期实践中总结出来的最佳实践。通过深入理解这些设计模式,我们可以更好地进行面向...

    C++设计模式-基于QT4开源跨平台开发框架 源码

    C++设计模式是一种在软件开发中经过验证的解决常见问题的方法论,它为软件开发提供了标准的解决方案。在本资源中,"C++设计模式-基于QT4开源跨平台开发框架 源码",我们将重点探讨如何在C++编程语言中结合QT4框架来...

Global site tag (gtag.js) - Google Analytics