首页 > 其他分享 >设计模式之工厂方法模式

设计模式之工厂方法模式

时间:2025-01-09 22:14:26浏览次数:1  
标签:use 创建 模式 工厂 产品 子类 设计模式

设计模式之工厂方法模式(Factory Method Pattern)

模式定义

工厂方法模式(Factory Method Pattern)又称为工厂模式,也叫虚拟构造器(Virtual Constructor)模式或者多态工厂(Polymorphic Factory)模式,它属于类创建型模式。在工厂方法模式中,工厂父类负责定义创建产品对象的公共接口,而工厂子类则负责生成具体的产品对象,这样做的目的是将产品类的实例化操作延迟到工厂子类中完成,即通过工厂子类来确定究竟应该实例化哪一个具体产品类。

类图

代码

//抽象产品类
class Product {
public:
    virtual void use() = 0;
    //抽象类的析构函数设置为虚函数
	virtual ~Product() {}
};

class ProductA : public Product {
public:
    void use() override
    {
    	cout << "void ProductA::use()" << endl;
    }
};
class ProductB : public Product {
public:
    void use() override
    {
    	cout << "void ProductB::use()" << endl;
    }
};

//抽象工厂类
class Factory {
public:
    virtual Product* createProduct() = 0;
	virtual ~Factory() {}
};

class FactoryA : public Factory {
public:
    Product* createProduct() override {
    	return new ProductA();
	}
};
class FactoryB : public Factory {
public:
    Product* createProduct() override {
    	return new ProductB();
	}
};

void test()
{
    //生产产品A
	unique_ptr<Factory> factoryA(new FactoryA());
	unique_ptr<Product> productA(factoryA->createProduct());
	productA->use();
	//生产产品B
	cout << endl << endl;
	unique_ptr<Factory> factoryB(new FactoryB());
	unique_ptr<Product> productB(factoryB->createProduct());
	productB->use();
}

工厂方法模式的优点

  1. 用户只需要知道具体工厂的名称就可得到所要的产品,无须知道产品的具体创建过程。
  2. 灵活性增强,对于新产品的创建,只需多写一个相应的工厂类。
  3. 典型的解耦框架。高层模块只需要知道产品的抽象类,无须关心其他实现类,满足迪米特法则、依赖倒置原则和里氏替换原则。
  4. 对扩展开放对修改关闭;解决了简单工厂的缺点问题。

工厂方法模式的缺点

  1. 类的个数容易过多,增加复杂度。
  2. 增加了系统的抽象性和理解难度。
  3. 接口的传入参数类型需要一致,且只能对单一变化量接口使用。
  4. 工厂只能生产一种产品,此弊端可使用抽象工厂模式解决。

使用场景

  1. 客户只知道创建产品的工厂名,而不知道具体的产品名。
  2. 创建对象的任务由多个具体子工厂中的某一个完成,而抽象工厂只提供创建产品的接口。
  3. 客户不关心创建产品的细节,只关心产品的品牌。

参考博文

  1. https://design-patterns.readthedocs.io/zh-cn/latest/creational_patterns/factory_method.html

标签:use,创建,模式,工厂,产品,子类,设计模式
From: https://www.cnblogs.com/Invinc-Z/p/18662969

相关文章

  • 设计模式之抽象工厂模式
    设计模式之抽象工厂模式(AbstractFactoryPattern)模式定义抽象工厂模式(AbstractFactoryPattern):提供一个创建一系列相关或相互依赖对象的接口,而无须指定它们具体的类。抽象工厂模式又称为Kit模式,属于对象创建型模式。类图代码//抽象产品类AclassAbstractProductA{pub......
  • 设计模式之观察者模式
    设计模式之观察者模式(ObserverPattern)模式定义观察者模式(ObserverPattern):定义对象间的一种一对多依赖关系,使得每当一个对象状态发生改变时,其相关依赖对象皆得到通知并被自动更新。观察者模式又叫做发布-订阅(Publish/Subscribe)模式、模型-视图(Model/View)模式、源-监听器(Sourc......
  • Java设计模式之享元模式
    什么是享元模式享元模式(Flyweight)就是把部分和整体的关系用树形结构来表示,从而使客户端能够把一个个的部分对象和有他们组合起来的整体对象采用同样的方式看待,他也是一个继承的替代,其实具体的说,享元模式就是用时间交换了空间。用程序的运行速度来读取是否重复的对象内容,然......
  • 设计模式-装饰模式
    装饰模式(DecoratorPattern)是结构型设计模式之一,它允许动态地给一个对象添加一些额外的职责,而无需改变其结构。装饰模式通过创建一个装饰类,使用继承的方式来扩展对象的功能,从而避免了大量的子类化问题。装饰模式的关键要点:组件接口(Component):定义一个接口,表示被装饰的对象和装......
  • 第10章图10.16-10.20《分析模式》原图和UML图对比
    DDD领域驱动设计批评文集做强化自测题获得“软件方法建模师”称号《软件方法》各章合集图10.16创建传统期权类型。这可以使处理状态模型变得更容易,但不那么自然。图10.17“投资组合浏览器”以及它和领域模型的关系。“投资组合浏览器”和“浏览器行”是应用......
  • 第10章图10.11-10.15《分析模式》原图和UML图对比
    DDD领域驱动设计批评文集做强化自测题获得“软件方法建模师”称号《软件方法》各章合集之前给出的图10.3改编有错误,修正重发图10.3使用期权过程的事件图。期权只能在到期日开始后行使,并且只有在"价内(inthemoney)"时才会行使,即行使期权比以当前价格进行现货交易更......
  • 未来大气污染,CMIP6数据驱动WRF和WRF-Chem模式
     第六次国际耦合模式比较计划(CMIP6)基于不同的共享社会经济路径(SSP)及最新的人为排放趋势,预估了不同社会共享路径和温室气体排放情景下的未来气候变化趋势,这些结果为模拟预估未来气候变化背景下大气污染的演变趋势提供了可能。对模式比较计划的全球气候预估数据进行动力降尺度,结......
  • NAT四种模式的简单解释
    什么是NAT?NAT代表网络地址转换,允许多个内网设备共享一个公网IP地址,使内网设备能够与外部互联网通信,主要是为了解决IPV4地址不足的问题,NAT通常部署在路由器上。NAT在正常的网页浏览、观看视频没太大问题,主要影响在P2P连接上,对游戏、下载、视频通话等应用,会受到不同NAT类......
  • STM32 拓展 RTC案例1:使用闹钟唤醒待机模式 (HAL库)
    需求描述执行完毕正常代码之后,让MCU进入待机模式,设置闹钟,自动让MCU从待机模式中被唤醒。可以用led点亮熄灭显示是否唤醒。应用场景:比如设计一个野外温度自动采集的设备,规定每小时采集一次温度,就可以定义一个1小时的闹钟,定时唤醒,采集温度,采集完进入待机模式,可以大大降低设备功......
  • 生产管理新境界:JIT模式引领高效制造革命
    JIT(Just-In-Time)模式,即准时制生产方式,是一种以减少浪费、提高效率为目标的生产管理方法。以下是对JIT模式的详细解析:一、JIT模式的定义JIT模式是指在精确测定生产各工艺环节作业效率的前提下,按订单准确地计划,以消除一切无效作业与浪费为目标的一种管理模式。它强调在正确的时间......