Factory Method模式讲解

来源:互联网 发布:野生程序员博客 编辑:程序博客网 时间:2024/05/16 12:22

Factory Method模式讲解



零:FactoryMethod模式两个最重要的功能:
        1)定义创建对象的接口,封装了对象的创建。
        2)使得具体化类的工作延迟到了子类中。//抽象基类只是提供了对象创建的接口,其实现放在抽象基类的派生类中。

一、解决的问题:
    1、为提高内聚和松耦合,抽象出一些类的公共接口形成了抽象基类或接口。当用一个指向基类的指针来指向派生类时,需要用
new DrivedClass,此时客户必须知道子类的名称,并且程序的扩展和维护变得越来越困难。
    2、在一个要使用抽象基类的类中并不知道要实例化抽象基类的哪一个子类,但是在该类的子类中知道。

二、C++代码实现:

//product.h

#ifndef PRODUCT_H#define PRODUCT_Hclass Product{public:    ~Product();protected:    Product();};class ConcreteProduct : public Product{public:    ConcreteProduct();    ~ConcreteProduct();};#endif // PRODUCT_H
//product.cpp

#include "product.h"#include <iostream>using namespace std;Product::Product(){}Product::~Product(){}ConcreteProduct::ConcreteProduct(){    cout << "ConcreteProduct..." << endl;}ConcreteProduct::~ConcreteProduct(){}

//factory.h

<pre name="code" class="cpp">#ifndef FACTORY_H#define FACTORY_Hclass Product;class Factory{public:    virtual ~Factory() = 0;    virtual Product* CreateProduct() = 0; //创建对象的接口protected:    Factory();};class ConcreteFactory : public Factory{public:    ~ConcreteFactory();    ConcreteFactory();    Product* CreateProduct(); //创建对象接口的实现    //也可传递一个参数用以决定创建哪一个具体的Product};#endif // FACTORY_H


//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();}
//main.cpp

#include "factory.h"#include "product.h"#include <iostream>using namespace std;int main(){    Factory* fac = new ConcreteFactory();    Product* p = fac->CreateProduct();    return 0;}



三、存在的问题:
    FactoryMethod模式仅仅局限于一类类(即有共同的基类),如果要为不同种类的类提供一个创建对象的接口,
需使用AbstractFactory模式。






0 0