C++23中设计模式的factory模式
工厂模式的目的是为了在想要创建的A类的子类B类, 想要用C类来创建, 但是只有C类的子类D类有。 咱们就可以通过工厂类来解决。 把C类当做factory类。
factory 模式的两个最重要的功能
1. 定义创建对象的接口, 封装了对象的创建;
2. 是的具体化类的工作延迟到了子类中。
factory模式, 通过factory类的子类来创建product类的子类。因为只有factory的子类才能知道自己要创建的是哪个product的子类。
View Code
// Factory.h: interface for the Factory class. // ////////////////////////////////////////////////////////////////////// #if !defined(AFX_FACTORY_H__F5D4EA05_7262_4CC7_A111_D367F50DC7BE__INCLUDED_) #define AFX_FACTORY_H__F5D4EA05_7262_4CC7_A111_D367F50DC7BE__INCLUDED_ #if _MSC_VER > 1000 #pragma once #endif // _MSC_VER > 1000 #include "Product.h" class Factory { public: virtual ~Factory(); virtual Product *createProduct() = 0; protected: Factory(); }; class ConcreateFactory: public Factory { public: ConcreateFactory(); ~ConcreateFactory(); Product *createProduct(); }; #endif // !defined(AFX_FACTORY_H__F5D4EA05_7262_4CC7_A111_D367F50DC7BE__INCLUDED_) //=================================== // Factory.cpp: implementation of the Factory class. // ////////////////////////////////////////////////////////////////////// #include "Product.h" #include "Factory.h" ////////////////////////////////////////////////////////////////////// // Construction/Destruction ////////////////////////////////////////////////////////////////////// Factory::Factory() { } Factory::~Factory() { } ConcreateFactory::ConcreateFactory() { } ConcreateFactory::~ConcreateFactory() { } Product *ConcreateFactory::createProduct() { return new ConcreateProduct(); } //=================================== // Product.h: interface for the Product class. // ////////////////////////////////////////////////////////////////////// #if !defined(AFX_PRODUCT_H__1D59E936_73D3_4324_A3D6_6F0C62C098FE__INCLUDED_) #define AFX_PRODUCT_H__1D59E936_73D3_4324_A3D6_6F0C62C098FE__INCLUDED_ #if _MSC_VER > 1000 #pragma once #endif // _MSC_VER > 1000 class Product { public: Product(); virtual ~Product(); }; class ConcreateProduct: public Product { public: ConcreateProduct(); ~ConcreateProduct(); }; #endif // !defined(AFX_PRODUCT_H__1D59E936_73D3_4324_A3D6_6F0C62C098FE__INCLUDED_) //==================================== // Product.cpp: implementation of the Product class. // ////////////////////////////////////////////////////////////////////// #include <iostream> #include "Product.h" ////////////////////////////////////////////////////////////////////// // Construction/Destruction ////////////////////////////////////////////////////////////////////// Product::Product() { } Product::~Product() { } ConcreateProduct::ConcreateProduct() { std::cout << "create ConcreateProduct" << std::endl; } ConcreateProduct::~ConcreateProduct() { } //====================================== #include "Factory.h" #include "Product.h" int main() { Factory *fa = new ConcreateFactory(); Product *pr = fa->createProduct(); return 0; }