类创建型设计模式:工厂模式

C++教程(二):C++设计模式之工厂模式详细解析以及工厂模板类实现 在 C++ 中,工厂模式(Factory Pattern) 是一种创建型设计模式,它通过定义一个接口来创建对象,而不是直接实例化具体的类。这种模式的主要目的是将对象的创建过程封装起来,以便在不修改客户端代码的情况下轻松扩展新类型的对象。 阅读详情

前言

本文章根据刘伟(Sunny) 的设计模式一书记录的笔记,感谢作者的知识分享。

之前所说抽象工厂模式违背了开闭原则,工厂模式在基础上进行优化改进,通过抽象工厂实现.

定义

工厂方法模式(Factory Method Pattern):定义一个用于创建对象的接口(抽象工厂),让子类决定将哪一个类实例化。

工厂方法模式让一个类的实例化延迟到其子类。工厂方法模式又简称为工厂模式(Factory Pattern),又可称作虚拟构造器模式(Virtual Constructor Pattern)或多态工厂模式(Polymorphic Factory Pattern)。工厂方法模式是一种类创建型模式。

实现

在这里插入图片描述
在工厂方法模式结构图中包含如下几个角色:

  • Product(抽象产品):它是定义产品的接口,是工厂方法模式所创建对象的超类型,也就是产品对象的公共父类。
  • ConcreteProduct(具体产品):它实现了抽象产品接口,某种类型的具体产品由专门的具体工厂创建,具体工厂和具体产品之间一一对应。
  • Factory(抽象工厂):在抽象工厂类中,声明了工厂方法(Factory Method),用于返回一个产品。抽象工厂是工厂方法模式的核心,所有创建对象的工厂类都必须实现该接口。
  • ConcreteFactory(具体工厂):它是抽象工厂类的子类,实现了抽象工厂中定义的工厂方法,并可由客户端调用,返回一个具体产品类的实例。
Java代码实现
	//日志记录器接口:抽象产品  
	interface Logger {  
	    public void writeLog();  
	}  
	
	//数据库日志记录器:具体产品  
	class DatabaseLogger implements Logger {  
	    public void writeLog() {  
	        System.out.println("数据库日志记录。");  
	    }  
	}  
	
	//文件日志记录器:具体产品  
	class FileLogger implements Logger {  
	    public void writeLog() {  
	        System.out.println("文件日志记录。");  
	    }  
	}  
	
	//日志记录器工厂接口:抽象工厂  
	interface LoggerFactory {  
	    public Logger createLogger();  
	}  
	
	//数据库日志记录器工厂类:具体工厂  
	class DatabaseLoggerFactory implements LoggerFactory {  
	    public Logger createLogger() {  
	            //连接数据库,代码省略  
	            //创建数据库日志记录器对象  
	            Logger logger = new DatabaseLogger();   
	            //初始化数据库日志记录器,代码省略  
	            return logger;  
	    }     
	}  
	
	//文件日志记录器工厂类:具体工厂  
	class FileLoggerFactory implements LoggerFactory {  
	    public Logger createLogger() {  
	            //创建文件日志记录器对象  
	            Logger logger = new FileLogger();   
	            //创建文件,代码省略  
	            return logger;  
	    }     
	}
	//编写如下客户端测试代码:
	class Client {  
	    public static void main(String args[]) {  
	        LoggerFactory factory;  
	        Logger logger;  
	        factory = new FileLoggerFactory(); //可引入配置文件实现  
	        logger = factory.createLogger();  
	        logger.writeLog();  
	    }  
	}

总结

正如前面所说工厂模式继承了简单工厂模式的优点,同时还弥补了简单工厂模式的不足。

  • 优点

    (1) 在工厂方法模式中,工厂方法用来创建客户所需要的产品,同时还向客户隐藏了哪种具体产品类将被实例化这一细节,用户只需要关心所需产品对应的工厂,无须关心创建细节,甚至无须知道具体产品类的类名。

    (2) 基于工厂角色和产品角色的多态性设计是工厂方法模式的关键。它能够让工厂可以自主确定创建何种产品对象,而如何创建这个对象的细节则完全封装在具体工厂内部。工厂方法模式之所以又被称为多态工厂模式,就正是因为所有的具体工厂类都具有同一抽象父类。

    (3) 使用工厂方法模式的另一个优点是在系统中加入新产品时,无须修改抽象工厂和抽象产品提供的接口,无须修改客户端,也无须修改其他的具体工厂和具体产品,而只要添加一个具体工厂和具体产品就可以了,这样,系统的可扩展性也就变得非常好,完全符合“开闭原则”。

  • 缺点

    (1) 在添加新产品时,需要编写新的具体产品类,而且还要提供与之对应的具体工厂类,系统中类的个数将成对增加,在一定程度上增加了系统的复杂度,有更多的类需要编译和运行,会给系统带来一些额外的开销。

    (2) 由于考虑到系统的可扩展性,需要引入抽象层,在客户端代码中均使用抽象层进行定义,增加了系统的抽象性和理解难度,且在实现时可能需要用到DOM、反射等技术,增加了系统的实现难度。

iOS开发 - 面向对象设计的设计模式(一):创建型模式(附 Demo & UML类图) 继上一篇的面向对象设计的设计原则,本篇是面向对象设计系列的第二个部分:面向对象设计的设计模式的第一篇文章。 另外,本篇博客的代码和类图都保存在我的GitHub库中:中的Chapter2。 最开始说一下什么是设计模式。关于设计模式的概念,有很多不同的版本,在这里说一下我个人比较赞同的一个说法: 设计模式用于在特定的条件下为一些重复出现的软件设计问题提供合理的、有效的解决方案。 去掉一些定语的修饰,这句话精简为: 设计模式为问题提供方案。 简单来看,设计模式其实就是针对某些问题的一些方案。在软件开发 阅读详情

相关推荐

程序设计:C++实现类工厂模式

工厂模式属于创建型模式,即类对象生成时间段的管理;主要可分为三类,简单工厂、工厂方法、抽象工厂。工厂模式规定,工厂无论有何不同,返回的对象都必须位于heap。

gongdiwudu的专栏 5469

创建类模式之工厂模式

设计模式之工厂模式

qq_50319351的博客 684

OpenClaw 企业级自动化系统架构设计与实现

本文介绍基于 OpenClaw 构建的企业级自动化系统的完整架构设计、技术选型、实现细节和性能优化方案。

2604_95445636的博客 482

三种工厂模式

一、简单工厂模式 二、工厂方法模式 三、抽象工厂模式

qq_48574360的博客 1642

从数据校准到论文呈现:fsQCA与NCA方法融合的完整实证研究指南

本文详细介绍了fsQCA(模糊集定性比较分析)与NCA(必要条件分析)方法融合的完整实证研究流程,从数据校准到论文呈现。通过软件操作技巧、R语言NCA包高效使用及论文写作规范,帮助研究者避免常见误区,提升研究质量与可靠性。特别适合需要进行组态分析的研究生和学者参考。

weixin_29215391的博客 414

嵌入式开源项目哪里找

对比产生的伤害是经验思考积累下的差距,知道自己不知道什么然后前进去追寻。

quanquanxiaobu的博客 3936

类工厂模式(Factory Pattern)

工厂模式(Factory Pattern)是一种常用的设计模式,用于创建对象时不会将客户端代码与类构造代码直接关联起来,而是通过一个共同的接口指向新创建的对象。这样可以在不修改客户端代码的情况下更改所创建的具体类实例。在Python中,实现工厂模式可以通过多种方式,包括简单工厂、工厂方法模式、抽象工厂模式等。

weixin_47695827的博客 847

ABAP代码检查(Code Review)

1、SLIN 扩展程序检查 也可通过(SE38工具栏->检查-扩展程序检查) 进入 2、ATC 检查 通过<SE38菜单栏-检查-ABAP测试主控室> 或事物代码SCI, 支持自定义检查变式 SCI可以配置检查变式满足特殊需求,配置对象集用于批量检查 3、通过ABAP测试主控室实现统一管理,定期检查作业和监控功能(事务代码ATC) 参考 SLIN...

u012232542的博客 6063

类创建型设计模式:简单工厂模式

前言 本文章根据刘伟(Sunny) 的设计模式一书记录的笔记,感谢作者的知识分享。 工厂模式是最常用的一类创建型设计模式,通常我们所说的工厂模式是指工厂方法模式,它也是使用频率最高的工厂模式。本章将要学习的简单工厂模式是工厂方法模式的“小弟”,它不属于GoF 23种设计模式,但在软件开发中应用也较为频繁,通常将它作为学习其他工厂模式的入门。此外,工厂方法模式还有一位“大哥”——抽象工厂模式。这三种工厂模式各具特色,难度也逐个加大,在软件开发中它们都得到了广泛的应用,成为面向对象软件中常用的创建对象的工具。

青语的博客 408

WinInet 编程:MFC 中的互联网编程

WinInet 是一套 Windows API(应用程序编程接口),用于实现互联网应用程序的网络通信和数据传输。WinInet 抽象了底层网络协议和硬件细节,为程序员提供了一套统一的接口,简化了互联网应用程序的开发过程。WinInet 广泛应用于各种 Windows 应用程序中,包括网页浏览器、下载管理器、网络游戏等。MFC WinInet 是一套强大的类库,为 MFC 程序员提供了在 Windows 平台上实现互联网通信和数据传输的工具。

JAZJD的博客 1636

哨兵2植被参数反演避坑指南:SNAP中10m/20m分辨率选择与缺失波段处理

本文深入解析了使用SNAP软件进行哨兵2号植被参数反演时的关键操作与决策。核心在于理解SNAP生物物理处理器NNET10m与NNET20m的架构差异,根据是否需要反演冠层叶绿素含量(Cab)等参数,明智选择10米或20米分辨率工作流。文章详细指导了大气校正、波段重采样及处理L2A数据中B01波段“缺失”等常见问题的解决方案,为生态监测与精准农业应用提供清晰的避坑指南和完整实战流程。

wdx01234567的博客 260

Atitit 设计模式之道 艾提拉著 sbb 目录 1. 一、设计模式的分类 1 1.1. 总体来说设计模式分为三大类: 1 1.2. 创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建

Atitit  设计模式之道 艾提拉著 sbb   目录 1. 一、设计模式的分类 1 1.1. 总体来说设计模式分为三大类: 1 1.2. 创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。 1 1.3. 结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。 1 1.4. 行为型模式,共十一种:策略模式、模板方...

attilax的专栏 477

【2025最新版】间接平差——以水准网平差为例 (python详细过程版)

水准网间接平差的python代码实现。博客长期更新,本文最新更新时间为:2025年5月20日。

点云侠的博客 1702

设计模式-工厂模式(Factory)

Factory模式是一种创建型设计模式,用于封装对象的实例化过程。它提供了一个统一的接口来创建不同类型的对象,而无需暴露具体的实例化逻辑给客户端。 #include <iostream> #include <memory> // AbstractProduct(抽象产品类):定义产品共同的接口 class Product { public: virtual void operation() = 0; }; // ConcreteProductA(具体产品类A) class

qq_51853681的博客 804

【OpenClaw从入门到精通】第03篇:吃透Gateway/Skills/ClawHub核心概念(2026实测+避坑)

本文针对OpenClaw新手易混淆的核心概念痛点,以通俗类比+实操演示拆解OpenClaw核心、Gateway、Skills、ClawHub四大组件。通过“数字员工团队”类比明确各组件定位:OpenClaw核心是“老板”(调度中心)、Gateway是“前台+后勤”(后台进程)、Skills是“专业员工”(功能插件)、ClawHub是“人才市场”(技能商店)。补充版本更名史、技能加载优先级、ClawHub与GitHub区别等关键细节,结合“AI融资新闻查询并邮件推送”虚拟案例演示组件协同流程,梳理5个高频认知

专注于人工智能、软件开发、工控自动化、工厂数字化及智能化等领域,希望和大家共同进步! 5036

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

设计模式第二天|设计模式创建型:工厂模式、抽象工厂模式、单例模式、建造者模式

简单工厂模式其实并不算是一种设计模式,更多的时候是一种编程习惯。简单工厂的实现思路是,定义一个工厂类,根据传入的参数不同返回不同的实例,被创建的实例具有共同的父类或接口。工厂方法模式是简单工厂的仅一步深化, 在工厂方法模式中,我们不再提供一个统一的工厂类来创建所有的对象,而是针对不同的对象提供不同的工厂。封装一个复杂对象构造过程,并允许按步骤构造。就是将复杂对象的创建过程拆分成多个简单对象的创建过程,并将这些简单对象组合起来构建出复杂对象。

weixin_60364343的博客 1088

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

面经系列之 设计模式(创建型)

设计模式创建型模式1 简单工厂模式(普通简单工厂,多方法简单工厂,静态简单工厂)1)模式定义2)类图3)代码示例4)优缺点5)适用场景2 工厂方法模式1)模式定义2)类图3)代码示例4)优缺点5)适用场景3)抽象工厂模式1)模式定义2)类图3)代码示例4)优缺点5)适用场景4)建造者模式 创建型模式 1 简单工厂模式(普通简单工厂,多方法简单工厂,静态简单工厂) 1)模式定义 在简单工厂模式中,...

weixin_40824616的博客 853

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

java设计模式总结之工厂模式

总体来说设计模式分为三大类: 创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。 结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。 行为型模式,共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。 1.工厂模式 1.1普通工厂模...

qq_42572415的博客 205

设计模式 - 创建型设计模式

在日常生活中每个人都会遇到各种各样的问题, 经过归类和分析后发现, 很多问题都可以使用相同的方式方法来解决, 将这些方式方法整理就产生了设计模式. 简单说, 设计模式是解决通用问题的模板. 每个领域都有自己的设计模式, 在计算机领域设计模式主要分三大类:本文在主要体现。

sun19900906的博客 1059

Java开发中的23中设计模式详解(二)创建型模式之工厂模式

设计模式一共有23种,分为三大类 创建型模式: 单例模式,工厂模式,抽象工厂模式,原型模式 结构型模式: 适配器模式,桥接模式,装饰器模式,组合模式,外观模式,享元模式,代理模式 行为型模式: 模板方法模式,命令模式,迭代器模式,观察者模式,中介者模式,备忘录模式,解释器模式,策略模式,责任链模式,访问者模式 这23种设计模式本质上是对Java面向对象原则实际运用,这23种设计模式更多是为了提高代码的可读性、可复用性、可维护性、稳健性以及安全性。让我们写出的代码更加整洁。 一、创建型模式 1、单例模式 2、

qq_44658573的博客 196

c++23中设计模式之单例模式、工厂方法、抽象工厂

参考 https://www.youkuaiyun.com/gather_2a/MtzaYgwsNTEtYmxvZwO0O0OO0O0O.html https://blog.youkuaiyun.com/taiyang1987912/article/category/2859245/2? #单例模式 确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。 #include <iostream> u...

qq_41489640的博客 482

【设计模式】——创建型设计模式

【什么是创建型设计模式】 创建型模式抽象了实例化过程,他们帮助一个系统独立于如何创建、组合和表示它的那些对象,一个类创建型模式使用继承改变被实例化的类,而一个对象创建型模式将实例化委托给另一个对象。 创建型模式有抽象工厂(Abstract Factory)、生成器(Build)、工程方法(Factory Method)、原型(Prototype)、单例(Singleton)。 1、抽象工厂(Abs...

一只蓝精灵 281

简单聊聊工厂模式

设计模式的分类: 设计模式总体分为三大类: 创建型模式:工厂方法模式,抽象工厂模式,单例模式,建造者模式,原型模式。 结构型模式:适配器模式,装饰器模式,代理模式,外观模式,桥接模式,组合模式,享元模式。 行为型模式:策略模式,模板方法模式,观察者模式,迭代子模式,责任链模式,命令模式,备忘录模式,状态模式,访问者模式,中介模式,解释器模式。 工厂模式: 工厂模式属于创建型模式,顾名思义就是将零件组装成产品的地方,也就是创建对象的工厂。 通常情况下,作为一个工厂的类有一个对象以及与它关联的多个方法。调用者使

hdushsh的博客 561

Java经典设计模式之五大创建型模式(附实例和详解)

一、概况总体来说设计模式分为三大类:(1)创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。(2)结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。(3)行为型模式,共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。二、设计模式的六大原则1

风中飘雪 214

设计模式(java) -----工厂模式、抽象工厂模式、单例模式、建造者模式

设计模式的类型 这些模式可以分为三大类:创建型模式(Creational Patterns)、结构型模式(Structural Patterns)、行为型模式(Behavioral Patterns)。当然,我们还会讨论另一类设计模式:J2EE 设计模式。 1 创建型模式:这些设计模式提供了一种在创建对象的同时隐藏创建逻辑的方式,而不是使用 new 运算符直接实例化对象。这使得程序在判断针对某个给...

qq_41585840的博客 338

Python之常用设计模式(创建型模式篇)

Python之常用设计模式 一、设计模式分类 1. 创建型模式 工厂方法模式、抽象工厂模式、建造者模式、原型模式、单例模式 2. 结构型模式 适配器模式、桥模式、组合模式、装饰模式、外观模式、享元模式、代理模式 3. 行为型模式 解释器模式、责任链模式、命令模式、迭代器模式、中介者模式、备忘录模式、观察者模式、状态模式、策略模式、访问者模式、模板方法模式 二、创建型模式 1. 简单工厂模式 内容 不直接向客户端暴露对象创建的实现细节,而是通过一个工厂类来负责创建产品类的实例。 角色(类) 工厂

南枝向暖北枝寒 2066
上一篇: 类创建型设计模式:简单工厂模式
下一篇: 对象创建型设计模式:抽象工厂模式
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

贝多芬也爱敲代码

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值