c++ 创建型模式-工厂方法(Factory_Method)

1) 意图:

  定义一个用于创建对象的接口,让子类决定实例化哪一个类。

2) 结构:

  

   其中:

    Product定义工厂方法所创建的对象的接口

    ConcreteProduct实现Product接口

    Creator声明工厂方法

    CreatorProduct 一一对应,Creator可以派生多个具体工厂类,Proudct可以派生多个具体产品类,但每一个具体工厂类只能创建一个具体产品类的实例。

    (抽象工厂中,抽象工厂类可以对应多个抽象产品类,二者也都可以派生多个子类,且每个具体工厂类可以创建多个具体产品类)

3) 适用性:

  1. 当一个类不知道它所必须创建的对象的类
  2. 当一个类希望由它的子类来指定它所创建的对象
  3. 当类将创建对象的职责委托给多个帮助子类中的某一个,并且你希望将哪一个帮助子类是代理者局部化的时候

4) 举例:

  

#include <iostream>
class  Product
{
public:
    Product()
    {
        std::cout << "Product" << std::endl;
    }
    virtual ~Product()
    {
        std::cout << "~Product" << std::endl;
    }
};
class ConcreateProduct : public Product
{
public:
    ConcreateProduct()
    {
        std::cout << "ConcreateProduct" << std::endl;
    }
    virtual ~ConcreateProduct()
    {
        std::cout << "~ConcreateProduct" << std::endl;
    }
};

class Creator
{
public:
    Creator() 
    {
        std::cout << "Creator" << std::endl;
    }
    virtual ~Creator() 
    {
        if (m_p)
        {
            std::cout << "~Creator delete m_p" << std::endl;
            delete m_p;
        }
    }
    void  AnOperation()
    {
        m_p = FactoryMethod();
    }
protected:
    virtual Product* FactoryMethod() = 0;
private:
    Product* m_p;
};
class ConcreateCreator : public Creator
{
public:
    Product* FactoryMethod()
    {
        return new ConcreateProduct();
    }
};
int main()
{
    Creator* p = new ConcreateCreator;
    p->AnOperation();
    delete p;
    system("pause");
}

猜你喜欢

转载自www.cnblogs.com/ho966/p/12228488.html