JAVA设计模式—工厂模式

JAVA设计模式—工厂模式

工厂模式是一种创建型设计模式,它提供了一种创建对象的接口,但是由子类决定要实例化的类是哪一个。工厂模式使得一个类的实例化延迟到其子类。

用代码进行举例演示

假设我们有一个产品接口 Product 和两个具体产品类 ConcreteProductAConcreteProductB,以及一个工厂接口 Factory 和两个具体工厂类 ConcreteFactoryAConcreteFactoryB

// 产品接口
interface Product {void display();
}// 具体产品类 A
class ConcreteProductA implements Product {@Overridepublic void display() {System.out.println("This is ConcreteProductA.");}
}// 具体产品类 B
class ConcreteProductB implements Product {@Overridepublic void display() {System.out.println("This is ConcreteProductB.");}
}// 工厂接口
interface Factory {Product createProduct();
}// 具体工厂类 A
class ConcreteFactoryA implements Factory {@Overridepublic Product createProduct() {return new ConcreteProductA();}
}// 具体工厂类 B
class ConcreteFactoryB implements Factory {@Overridepublic Product createProduct() {return new ConcreteProductB();}
}

使用工厂模式的客户端代码:

public class Client {public static void main(String[] args) {// 使用工厂A创建产品AFactory factoryA = new ConcreteFactoryA();Product productA = factoryA.createProduct();productA.display();// 使用工厂B创建产品BFactory factoryB = new ConcreteFactoryB();Product productB = factoryB.createProduct();productB.display();}
}
介绍工厂模式的具体应用场景

工厂模式的具体应用场景包括:

  • 数据库驱动的选择: 在连接数据库时,不同数据库有不同的驱动,可以使用工厂模式根据配置或条件选择合适的数据库驱动。
  • 日志记录器的选择: 在应用中可能需要使用不同的日志记录器(如文件日志、数据库日志),工厂模式可以根据配置选择合适的日志记录器。
  • 图形界面库中的组件创建: 在图形界面库中,不同的操作系统或主题可能需要使用不同的UI组件,工厂模式可以根据运行时条件创建相应的UI组件。
介绍工厂模式的优点

工厂模式的优点包括:

  • 封装性好: 客户端代码不需要知道具体产品的类名,只需知道工厂接口和产品接口即可。
  • 扩展性好: 如果需要添加新的产品类,只需要创建对应的具体产品类和对应的具体工厂类即可,而不需要修改现有代码。
  • 符合单一职责原则: 每个具体工厂类只负责创建对应的产品,符合单一职责原则,降低了类的复杂度和耦合度。
  • 易于管理对象: 通过工厂模式,集中管理对象的创建,有利于统一管理和维护。
  • 利于解耦: 客户端代码和具体产品类的实现解耦,可以更灵活地替换和切换产品类的实现。

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

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

相关文章

TensorRT英伟达官方示例解析(二)

系列文章目录 TensorRT英伟达官方示例解析(一) TensorRT英伟达官方示例解析(二) 文章目录 系列文章目录前言一、03-BuildEngineByTensorRTAPI1.1 建立 Logger(日志记录器)1.2 Builder 引擎构建器1.3 Netwo…

【GitHub项目推荐--Awesome-Go/Python/JavaScript/Java】【转载】

Awesome 译为令人惊叹的、极好的,GitHub 上有很多 Awesome 开头的开源项目。比如 Awesome-Go、Awesome-Python。 就像汇总常用的软件一样,GitHub上有大量的开源项目,开发者就会根据需要汇总一些常用的好用的资源,并且根据 Awesom…

美易官方:小米汽车交付时间传闻被官方辟谣

在科技与互联网的快速发展浪潮中,各类信息传播速度之快令人咋舌。然而,信息的真实性却时常成为公众关注的焦点。近日,关于小米汽车交付时间的谣言再次引起市场的广泛关注。小米公司发言人迅速作出回应,明确指出这些关于小米汽车交…

OCP NVME SSD规范解读-7.TCG安全日志要求

在OCP NVMe SSD规格中,TCG的相关内容涉及以下几个方面: 活动事件记录: NVMe SSD需要支持记录TCG相关的持久事件日志,用于追踪固态硬盘上发生的与TCG安全功能相关的关键操作或状态变化,如启动过程中的安全初始化、密钥…

计算机网络(第六版)复习提纲8

第三章 数据链路层 数据链路层在五层体系结构中处于第二层 链路层的任务是,把下面不可靠的物理层(信道)改成相对可靠的逻辑信道,把网络层提供的数据封装成数据帧交给物理层进行传递。 透明传输问题:不要因为封装成帧导…

当键入网址后,到网页显示,其间发生了什么

解析 URL: 浏览器地址栏输入 URL,浏览器解析 URL,从而生成发送给 web 服务器的请求信息(例如 www.example.com)。 检查域名缓存: 浏览器查看浏览器缓存系统缓存路由缓存, 如有存在缓存&#x…

并查集算法实现

测试链接 牛客测试链接 介绍 并查集(Disjoint Set)是一种用于处理集合合并与查询问题的数据结构。它支持两种操作:合并(Union)和查询(Find)。 合并操作将两个不相交的集合合并为一个集合&am…

SQL注入实战:盲注

盲注: 1、当攻击者利用SQL注入漏洞进行攻击时,有时候web应用程序会显示,后端数据库执行SQL查询返回的错误信息,这些信息能帮助进行SQL注入,但更多时候,数据库没有输出数据web页面,这是攻击者会…

JRT集中打印

之前一直在夯实基础,现在是补demo的时段了。了解过检验集中打印的人知道,集中打印的逻辑有多复杂。既要考虑普通检验报告加上换页。又要考虑微生物报告加上换页,既有A5的报告,也有A4的报告,还要考虑A4打印两个组装A5时…

ChatGPT是不是未来的灵魂伴侣?

嗨,亲爱的读者们!今天,我们要探讨的话题是有点科技感,有点时尚感,也有点梦幻感——没错,就是ChatGPT,你们心中的那位聊天界的巨星。 1. ChatGPT:我的AI小助手还会聊天 ChatGPT&…

【栈与队列专题】滑动窗口的最大值

一、滑动窗口的最大值输入:nums [1,3,-1,-3,5,3,6,7], k 3输出:[3,3,5,5,6,7]解释: 滑动窗口的位置 最大值 --------------- ----- [1 3 -1] -3 5 3 6 7 3 1 [3 -1 -3] 5 3 6 7 3 1 …

工程化代码管理高频面试题

1. git常用命令以及工作中都怎么工作 git init 初始化仓库 ​ git status 查看当前各个区域的代码状态。 ​ git log查看commit记录 ​ git reflog查看完整记录 ​ git add 添加工作区代码到暂存区 ​ Git commit 暂存区代码的提交 ​ git reset 代码的版本回退 ​ git stash …

《WebKit 技术内幕》学习之七(3): 渲染基础

3 渲染方式 3.1 绘图上下文(GraphicsContext) 上面介绍了WebKit的内部表示结构,RenderObject对象知道如何绘制自己,但是,问题是RenderObject对象用什么来绘制内容呢?在WebKit中,绘图操作被定…

finalshell连接linux的kali系统

kali的ssh服务似乎是默认关闭的,笔者在玩CentOS系统时可以直接用finalshell完成连接,但kali不行,需要先手动开启ssh服务。 开启kali的ssh服务 输入【ssh start】命令开启ssh服务,可以用【ssh status】命令查看ssh状态&#xff0c…

第40集《佛法修学概要》

请大家打开讲义第一百零六页。我们讲到大乘的果位。大乘佛法的修学跟小乘最大的差别,主要在于一句话,就是大乘佛法是一种“称性起修,全修在性”。大乘佛法的功德第一个“称性”,这个“称”就是随顺。我们一念明了的心,…

【数据结构】 链栈的基本操作 (C语言版)

目录 一、链栈 1、链栈的定义: 2、链栈的优缺点: 二、链栈的基本操作算法(C语言) 1、宏定义 2、创建结构体 3、链栈的初始化 4、链栈的进栈 5、链栈的出栈 6、获取栈顶元素 7、栈的遍历输出 8、链栈的判空 9、求链…

AtCoder Beginner Contest 337 A~G

A.Scoreboard(循环) 题意: 两个队伍进行 N N N场比赛。在第 i i i场比赛中 ( 1 ≤ i ≤ N ) (1≤i≤N) (1≤i≤N),两队各得到 X i X_i Xi​和 Y i Y_i Yi​分。比赛结束后总分更高…

BACnet网关BL121BN 实现稳定可靠、低成本、简单的楼宇自控协议BACnet转OPC UA解决方案

随着楼宇自控系统的迅猛发展,人们深刻认识到在楼宇暖通行业中,实时、可靠、安全的数据传输至关重要。在此背景下,高性能的楼宇暖通数据传输解决方案——协议转换网关应运而生,广泛应用于楼宇自控和暖通空调系统应用中。 钡铼技术…

[反转链表] [合并两个有序链表][分割链表]

这里写目录标题 反转链表合并两个有序链表分割链表 反转链表 1、题目: 2.思路  思路1:建立一个newHead,取一个节点进行头插。具体做法如下! 建立一个newHead(新头),由于一个节点里面存的是下一个节点的地址,如果取…

VS2019查看文件编码格式

文件->高级保存选项 在这里可以看见现在的编码格式也可以修改编码格式 如果没有高级保存选项的话可以参考这篇博客进行设置