当前位置: 首页 > news >正文

设计模式 - 工厂模式

简单工厂模式

public class CoffeeFactory {public Coffee get(string coffeeType) {Coffee coffee = null;if ("American".equals(coffeeType)) {coffee = new AmericanCoffee();} else if ("Latte".equals(coffeeType)) {coffee = new LatteCoffee();}return coffee; }
}

简单工厂模式不属于设计模式,比较像编程习惯。在开发中,也有人将工厂类中获取对象的方法定义为静态方法,此时为静态工厂模式,同样不属于设计模式。

优点:客户端无需关心对象的创建细节,向工厂传入参数即可获得相应的对象。初步实现责任的分离,工厂负责生产,客户端只负责消费。

缺点:增加新产品时需要修改工厂类的代码,违反了 OCP 开闭原则。

工厂方法模式

public interface CoffeeFactory {Coffee get();
}public class AmericanCoffeeFactory implements CoffeeFactory {@Overridepublic Coffee get() {return new AmericanCoffeeFactory();}
}public class LatteCoffeeFactory implements CoffeeFactory {@Overridepublic Coffee get() {return new LatteCoffeeFactory();}
}

工厂方法模式克服了简单工厂模式的缺点,在增加新产品时无需修改工厂类的代码。但每增加一个新产品就要增加一个具体产品类和一个对应的具体工厂类,导致系统复杂度增加。

抽象工厂模式

工厂方法模式考虑的是某一类产品的生产,如咖啡工厂只生产咖啡。而抽象工厂模式将考虑多类产品的生产,如甜品工厂不仅生产咖啡,还生产甜品。

在抽象工厂模式中,将同一个具体工厂所生产的位于不同等级的一组产品称为一个产品族。也就是说,美式咖啡和抹茶慕斯是同一产品族,拿铁咖啡和提拉米苏是同一产品族。

优点:可以保证通过同一个抽象工厂创建的多个对象始终来自同一族,比如通过 MacFactory 创建 UI 时,只能得到来自同一个风格的各种组件。

缺点:当产品族中需要增加一个新的产品时,所有的工厂类都需要修改。

http://www.xdnf.cn/news/547165.html

相关文章:

  • 中断全攻略:单片机优先级与 NVIC 详解(超形象解释)
  • Kubernetes中微服务JVM监控与自动发现的解决方案
  • HarmonyOS5云服务技术分享--云数据库使用指南
  • (十三)深入了解AVFoundation-采集:视频帧采集与实时滤镜处理
  • Https流式输出一次输出一大段,一卡一卡的-解决方案
  • 海康工业相机白平衡比选择器对应的值被重置后,如何恢复原成像
  • 【Unity】DOTween的常用函数解释
  • Java 大视界——Java大数据在智慧交通智能停车诱导系统中的数据融合与实时更新
  • 【数据结构】队列的完整实现
  • 五:操作系统内存管理之连续内存分配
  • 机器学习10-随机森林
  • 解决将cpp编译为dll,使用ctype的cdll调用,printf不输出在终端
  • 算法与数据结构:位运算与快速幂
  • 地理信息数据格式.GeoJSON数据格式介绍
  • 无人机避障——深蓝学院浙大Fast-planner学习部分(采用均匀B-Spline和非均匀B-Spline进行轨迹优化和时间重分配)
  • 力扣-盛最多水的容器
  • 网络刷卡器的分类和网口通讯流程
  • hghac集群服务器时间同步(chrony同步)
  • 替换word中的excel
  • 【25软考网工】第七章 (2)UOS Linux文件和目录管理、用户和组管理
  • 音频应用的MediaSession冲突
  • Transfomer学习
  • Java NIO(New I/O)
  • ubuntu kubeasz 部署高可用k8s 集群
  • k8s1.27版本集群部署minio分布式
  • 01 基本介绍及Pod基础
  • 【DCGMI专题1】---DCGMI 在 Ubuntu 22.04 上的深度安装指南与原理分析(含架构图解)
  • 深度学习架构快速入门——卷积神经网络CNN、循环神经网络RNN、生成对抗网络GAN、Transformer以及编码器-解码器
  • Jenkins:自动化之魂,解锁高效开发的密钥
  • 2025-05-20 模型下载--文本向量化--Faiss检索