常用设计模式之简单工厂模式

xiaoxiao2021-02-28  86

简单工厂模式: 简单工厂模式是属于创建型模式,又叫做静态工厂方法(Static Factory Method)模式,但不属于23种GOF设计模式之一。简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例。简单工厂模式是工厂模式家族中最简单实用的模式,可以理解为是不同工厂模式的一个特殊实现。

简单工厂模式最重要的两个功能:

定义创建对象的接口,封装了对象的创建;使得具体化类的工作延迟到了子类中。

应用场景: 简单工厂模式解决的问题是如何去实例化一个合适的对象。 简单工厂模式的核心思想就是:有一个专门的类来负责创建实例的过程。 具体来说,把产品看着是一系列的类的集合,这些类是由某个抽象类或者接口派生出来的一个对象树。而工厂类用来产生一个合适的对象来满足客户的要求。 如果简单工厂模式所涉及到的具体产品之间没有共同的逻辑,那么我们就可以使用接口来扮演抽象产品的角色;如果具体产品之间有功能的逻辑或,我们就必须把这些共同的东西提取出来,放在一个抽象类中,然后让具体产品继承抽象类。为实现更好复用的目的,共同的东西总是应该抽象出来的。

工厂模式经典结构为:

具体代码实现如下:

//Product.h #ifndef _PRODUCT_H_ #define _PRODUCT_H_ class Product { public: virtual ~Product() = 0; /*屏蔽构造函数*/ protected: Product(); private: }; class ConcreteProduct :public Product { public: ~ConcreteProduct(); ConcreteProduct(); }; #endif //Product.cpp #include "Product.h" #include <iostream> using namespace std; Product::Product() { } Product::~Product() { } ConcreteProduct::ConcreteProduct() { cout << "ConcreteProduct..." << endl; } ConcreteProduct::~ConcreteProduct() { } //Factory.h #ifndef _FACTORY_H_ #define _FACTORY_H_ class Product; class Factory { public: virtual ~Factory()=0; virtual Product* CreateProduct() = 0; protected: Factory(); private: }; class ConcreteFactory :public Factory { public: ~ConcreteFactory(); ConcreteFactory(); Product* CreateProduct(); private: }; #endif //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(); system("pause"); return 0; }
转载请注明原文地址: https://www.6miu.com/read-36709.html

最新回复(0)