一起来学设计模式(3)——工厂模式

来源:互联网 发布:第三次经济普查数据库 编辑:程序博客网 时间:2024/05/15 20:34
 

 上一节介绍了简单工厂模式,这一节介绍一下工厂模式。

工厂模式与简单工厂模式的主要区别是:

1 . 在简单工厂模式中,通过一个具体的简单工厂类来创建不同的产品,而在工厂模式中,有一个抽象的工厂类,然后派生出不同的具体的工厂类,每个具体的工厂类仅能创建一种产品。

2. 在简单工厂模式中,如果要创建一种新的产品,需要修改简单工厂类,而在工厂模式中,仅需要继承现有的抽象工厂类,不会破坏之前的封装,扩展性提高了。

UML图如下如图所示:

/*** @file Factory.h* @brief * @author Don Hao* @date 2011-9-1 16:01:44* @version * <pre><b>copyright: </b></pre>* <pre><b>email: </b>hao.limin@gmail.com</pre>* <pre><b>company: </b>http://blog.csdn.net/donhao</pre>* <pre><b>All rights reserved.</b></pre>* <pre><b>modification:</b></pre>* <pre>Write modifications here.</pre>*/#ifndef _FACTORY_H#define _FACTORY_H#include <iostream>#include <string>class Fruit1{public:    Fruit1()    {    }    virtual ~Fruit1()    {    }};class Apple1: public Fruit1{public:    Apple1()    {        std::cout << "Apple1" << std::endl;    }    virtual ~Apple1()    {    }};class Pear1 : public Fruit1{public:    Pear1()    {        std::cout << "Pear1" << std::endl;    }    virtual ~Pear1()    {    }};class Factory{public:    Factory()    {    }    virtual ~Factory()    {    }    virtual Fruit1* createFruit1() = 0;};class FactoryApple1 : public Factory{public:    FactoryApple1()    {    }    virtual ~FactoryApple1()    {    }    virtual Fruit1* createFruit1()    {        return new Apple1();    }};class FactoryPear1 : public Factory{public:    FactoryPear1()    {    }    virtual ~FactoryPear1()    {    }    virtual Fruit1* createFruit1()    {        return new Pear1();    }};#endif /**< _FACTORY_H */

/*** @file Factory.c* @brief * @author Don Hao* @date 2011-9-1 16:01:43* @version * <pre><b>copyright: </b></pre>* <pre><b>email: </b>hao.limin@gmail.com</pre>* <pre><b>company: </b>http://blog.csdn.net/donhao</pre>* <pre><b>All rights reserved.</b></pre>* <pre><b>modification:</b></pre>* <pre>Write modifications here.</pre>*/#include "Factory.h"void main(){    FactoryApple1 fApple;    Fruit1* apple = fApple.createFruit1();    FactoryPear1 fPear;    Fruit1* pear = fPear.createFruit1();}

可以看到,有个抽象的工厂类Factory,派生出了两个具体的工厂类FactoryApple1和FactoryPear1,并且FactoryApple1仅能创建Apple对象,FactoryPear1仅能创建Pear对象。