1) 意图:
定义一个用于创建对象的接口,让子类决定实例化哪一个类。
2) 结构:
其中:
Product定义工厂方法所创建的对象的接口
ConcreteProduct实现Product接口
Creator声明工厂方法
Creator和Product 一一对应,Creator可以派生多个具体工厂类,Proudct可以派生多个具体产品类,但每一个具体工厂类只能创建一个具体产品类的实例。
(抽象工厂中,抽象工厂类可以对应多个抽象产品类,二者也都可以派生多个子类,且每个具体工厂类可以创建多个具体产品类)
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"); }
原文地址:https://www.cnblogs.com/ho966/p/12228488.html
时间: 2024-10-16 09:36:41