代码详解工厂设计模式【2】

文章1暴露了简单工厂模式的一些局限性。为了解决这些问题,我们可以使用工厂方法模式,它更好地遵循了开闭原则(对扩展开放,对修改封闭)。在工厂方法模式中,我们为每种产品提供一个工厂类,这样就避免了在一个工厂类中集中所有产品的创建逻辑,同时也使得新增产品时不需要修改已有的工厂类,只需要添加新的具体工厂类即可。

  1. 定义抽象产品和具体产品
public interface Document {void process();
}public class WordDocument implements Document {@Overridepublic void process() {System.out.println("Processing Word document...");}
}public class PdfDocument implements Document {@Overridepublic void process() {System.out.println("Processing PDF document...");}
}
  1. 定义抽象工厂和不同产品对应的工厂
public interface DocumentFactory {Document createDocument();
}public class WordDocumentFactory implements DocumentFactory {@Overridepublic Document createDocument() {return new WordDocument();}
}public class PdfDocumentFactory implements DocumentFactory {@Overridepublic Document createDocument() {return new PdfDocument();}
}
  1. 客户端代码
public class FactoryMethodDemo {public static void main(String[] args) {DocumentFactory wordFactory = new WordDocumentFactory();Document wordDocument = wordFactory.createDocument();wordDocument.process();DocumentFactory pdfFactory = new PdfDocumentFactory();Document pdfDocument = pdfFactory.createDocument();pdfDocument.process();}
}

在这个示例中,每种文档类型都有对应的工厂类(WordDocumentFactory和PdfDocumentFactory),它们实现了DocumentFactory接口。当需要创建一个文档对象时,我们通过相应的工厂实例来创建,而不是直接在客户端代码中指定具体类。这样,如果未来需要添加更多类型的文档处理,我们只需添加相应的具体产品和工厂类,无需修改现有代码,从而达到了开闭原则的要求。

工厂方法模式通过这种方式,将对象的创建逻辑分散到了各个具体工厂类中,每个具体工厂类负责创建一种具体产品,这样就避免了简单工厂模式中的问题,提高了系统的扩展性和可维护性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/852113.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

创邻科技张晨:期待解锁图技术在供应链中的关联力

近日,创邻科技创始人兼CEO张晨博士受浙江省首席信息官协会邀请,参加数字化转型与企业出海研讨会。 此次研讨会旨在深入探讨数字经济时代下,企业如何有效应对成本提升与环境变化所带来的挑战,通过数字化转型实现提效增益&#xff…

4090显卡 安装cuda 11.3 版本

文章目录 cuda 安装安装过程中会要求选择安装的内容更改cuda地址到你安装的地方 cuda 安装 cuda官网寻找cuda11.3 版本 https://developer.nvidia.com/cuda-11.3.0-download-archive?target_osLinux&target_archx86_64&DistributionUbuntu&target_version20.04&…

yolo-inference多后端+多任务+多算法+多精度模型 框架开发记录(python版)

先贴出github地址,欢迎大家批评指正:https://github.com/taifyang/yolo-inference 不知不觉LZ已经快工作两年了,由于之前的工作内容主要和模型部署相关,想着利用闲暇时间写一些推理方面的经验总结,于是有了这个工程。其…

C语言从头学20——指针

概念:指针是一个整型值,这个值代表一个内存地址,可以理解为指针是内存地址的门牌号码。通过指针可以找到所代表的内存地址上储存的内容。 一、指针变量的声明 字符 * 放在两个变量之间表示乘号,放在类型后边就表示声明该类…

6-11 函数题:某范围中的最小值

6-11 函数题&#xff1a;某范围中的最小值 分数 5 全屏浏览 作者 雷丽兰 单位 宜春学院 有n(n<1000)个整数&#xff0c;从这n个整数中找到值落在&#xff08;60至100之间&#xff09;的最小整数。 函数接口定义&#xff1a; int min ( int arr[], int n); 说明&#xf…

mysql的主从同步

MySQL的主从同步是一种数据复制技术&#xff0c;它允许将一个MySQL数据库服务器上的数据变化自动复制到一个或多个MySQL数据库服务器上。主从同步广泛用于高可用性、负载均衡、读写分离和数据备份。下面详细介绍MySQL主从同步的原理、配置步骤、常见问题及解决方法。 一、基本…

Dijkstra算法的原理

Dijkstra算法的原理可以清晰地分为以下几个步骤和要点&#xff1a; 初始化&#xff1a; 引入一个辅助数组D&#xff0c;其中D[i]表示从起始点&#xff08;源点&#xff09;到顶点i的当前已知最短距离。如果起始点与顶点i之间没有直接连接&#xff0c;则D[i]被初始化为无穷大&a…

边缘计算网关在智慧厕所远程监测与管理的应用

随着智慧城市建设的不断深入&#xff0c;城市公共设施的智慧化管理成为了提升城市品质和居民生活质量的关键建设。公厕作为城市基础设施的重要组成部分&#xff0c;其管理效率和卫生状况直接影响着市民的日常生活体验。在公厕设施建设背景下&#xff0c;边缘计算网关技术的应用…

使用Python多线程批量压缩图片文件

在现代社会中&#xff0c;图片已经成为人们生活中不可或缺的一部分&#xff0c;在很多应用中&#xff0c;我们需要处理大量的图片文件&#xff0c;并且常常需要将它们进行压缩以减小文件大小&#xff0c;提高加载速度&#xff0c; 如何使用Python的多线程功能来批量压缩图片文…

高精度汽车衡的应用领域有哪些?一文说清楚

很多人不知道什么是高精度汽车衡&#xff0c;它其实是一种称重工具&#xff0c;属于称重技术的重要分支。高精度汽车衡具有精准、快速且稳定的特点&#xff0c;在各个领域发挥着越来越重要的作用。下面来了解一下高精度汽车衡常见的应用领域。   高精度汽车衡在工业生产中的应…

关于xilinx srio ip复位问题

关于xilinx srio ip复位问题 语言 &#xff1a;Verilg HDL 、VHDL EDA工具&#xff1a; Vivado 关于xilinx srio ip复位问题一、引言二、FPGA 之间 srio通信复位处理复位时序不同步&#xff1a;SRIO 模块未正确初始化&#xff1a;等待复位完成的时间不足&#xff1a;SRIO 配置…

【JS重点09】JS闭包(面试重点)

本文核心目标&#xff1a;阅读完本文能说出什么是闭包&#xff0c;闭包作用以及如何利用闭包 一&#xff1a;闭包概览 1 闭包是什么 闭包&#xff08;closure&#xff09;是一个函数以及其捆绑的周边环境状态&#xff08;lexical environment&#xff0c;词法环境&#xff09…

NXP RT1060学习总结 - fsl_flexcan 基础CAN函数说明 -1

概要 CAN测试源码&#xff1a; https://download.csdn.net/download/qq_35671135/89425377 根据fsl_flexcan.h文件从文件末尾往前面梳理&#xff0c;总共30个基础CAN函数&#xff1b; 该文章只梳理常规CAN&#xff0c;增强型CAN后面再单独梳理。 使用的是RT1064开发板进行测试…

如何将接口返回/n替换为react.js中的换行符

将每个/n替换为ReactJS中的一个<br>标记。cpa_ability为后端返回的字段名

时间类:Calendar

一.Calendar概述 1.Calendar代表了系统当前时间的日历对象,可以单独修改,获取时间中的年&#xff0c;月&#xff0c;日 2.细节:Calendar是一个抽象类,不能直接创建对象。 二.获取Calendar日历类对象的方法 // 会根据系统的不同时区来获取不同的日历对象 // 会根据系统的不同…

6.每日LeetCode-数组类,找到所有数组中消失的数字(Go)

题目 448找到所有数组中消失的数字.go 给你一个含 n 个整数的数组 nums &#xff0c;其中 nums[i] 在区间 [1, n] 内。请你找出所有在 [1, n] 范围内但没有出现在 nums 中的数字&#xff0c;并以数组的形式返回结果。 示例 1&#xff1a; 输入&#xff1a;nums [4,3,2,7,8,2,…

Web网页前端教程免费:引领您踏入编程的奇幻世界

Web网页前端教程免费&#xff1a;引领您踏入编程的奇幻世界 在当今数字化时代&#xff0c;Web前端技术已成为互联网发展的重要驱动力。想要踏入这一领域&#xff0c;掌握相关技能&#xff0c;却苦于找不到合适的教程&#xff1f;别担心&#xff0c;本文将为您带来一份免费的We…

双喜临门 | 两大权威报告发布,开源网安实力登榜

近日&#xff0c;开源网安凭借出色表现和实力&#xff0c;荣获两大荣誉&#xff1a;入选《中国信息安全》杂志社联合数说安全发布的《2024 年中国金融行业网络安全市场全景图》&#xff0c;并登榜安在发布的《2024安在新榜网络安全产品“大众点评”百强榜》。 2024年中国金融行…

Java开发规范

1.接口命名规范–Restful API 原本格式是动词资源by传参&#xff0c;后来进化为Restful API&#xff0c;思想是以资源为中心。 动词用get,post,put,delete请求方法代替&#xff0c;by后面的名词用传参代替。 并且GET方法传参资源ID采用路径传参&#xff0c;除了资源ID外的GET…

【智能算法应用】基于A星算法求解六边形栅格地图路径规划

目录 1.算法原理2.结果展示3.参考文献4.代码获取 1.算法原理 精准导航&#xff1a;用A*算法优化栅格地图的路径规划【附Matlab代码】 六边形栅格地图 分析一下地图&#xff1a; 六边形栅格地图上移动可以看做6领域运动&#xff0c;偶数列与奇数列移动方式有所差异&#xff0…