您的位置:首页 > 其它

设计模式学习笔记二 ——工厂模式

2017-03-27 20:13 471 查看
                                               工厂模式

   工厂模式的意义在于定义一个创建产品对象的工厂接口,将实际创建工作推迟到子类当中。核心工厂类不再负责产品的创建,这样核心类成为一个抽象工厂角色,仅负责具体工厂子类必须实现的接口

    工厂模式同时也是一种类的管理模式。处于工厂模式下的开发,将多个属于同样类型的类集合在一起(具体产品角色),在他们之上创建一个工厂类(工厂角色),负责根据传入的参数实例化对应的产品对象并按业务初始化赋值对象属性。按抽象的思维方法,还可以在具体产品和工厂之间创建一个具体产品的抽象类(抽象产品角色),抽象出所有具体产品共有的方法和属性,进一步提高复用度、降低冗余。

   Factory模式的应用并不是只是为了封装对象的创建,而是要把对象的创建放到子类中实现:Factory中只是提供了对象创建的接口,其实现放在Factory的子类ConcereteFactory中进行

 <script src="https://code.csdn.net/snippets/2294888.js"></script>

   factory.h

   #ifndef _FACTORY_H_

   #define _FACTORY_H_                                                         

 

   class Product;

   class Factory

   {

  public:

      virtual ~Factory();

      virtual Product* CreateProduct()=0;

 Protected:

     Factory();

  };

  class ConcreteFactory:public Factory

  {

 public:

     ~ConcreteFactory();

      ConcreteFactory();

      Product *CreateProduct();

  }

 

factory.cpp

#include "Factory.h"

#include "Product.h"

#include<iostream>

using  namespace std;

Factory::Factory()

{

}

Factory::~Factory()

{

}

ConcreteFactory::ConcreteFactory()

{

    cout<<"ConcreteFactory..."<<endl;

}

ConcreteFactory::~ConcreteFactory()

{

}

Product* ConcreteFactory::CreateProduct()

{

    return new ConcreteProduct();

}

Product.h

#ifndef _PRODUCT_H_

#define _PRODUCT_H_

class Product

{

public:

    virtual ~Product()=0;

protected:            //屏蔽构造函数

    Product();

};

class ConcreteProduct:public Product

{

public:

    ~ConcreteProduct();

    ConcreteProduct();

}

 

Product.cpp

#include "Product.h"

#include<iostream>

using namespace std;

Product::Product()

{

}

Product::~Product()

{

}

ConcreteProduct::ConcreteProduct()

{

    cout<<"ConcreteProduct..."<<endl;

}

ConcreteProduct::~ConcreteProduct()

{

}

 

main.cpp

#include "Factory.h"

#include "Product.h"

#include<iostream>

using namespace std;

int main(int argc,char* argv[])

{

    Factory *fac = new ConcreteFactory();

    Product *p = fac->CreateProduct();

    return 0;

                                                                                

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: