Java 工厂模式的使用,零基础教程,上手即会

news2024/9/21 10:34:34

   工厂模式(Factory Pattern)是一种常用的创建型设计模式,它提供了一种创建对象的最佳方式。在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象。(常用于,多种方式支付、多种登录、多渠道等)

工厂模式简单分为:

1. 简单工厂模式(Simple Factory Pattern)

优点

  • 工厂类包含必要的判断逻辑,可以决定在什么时候创建哪一个产品类的实例,客户端可以免除直接创建产品对象的责任,而仅仅“消费”产品。

缺点

  • 当产品类不断增多时候,工厂逻辑会越来越复杂。
  • 违反了开闭原则,增加新产品时,需要修改工厂类的代码。

2. 工厂方法模式(Factory Method Pattern)

工厂方法模式定义了一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法让类的实例化推迟到子类中进行。

优点

  • 用户只需要知道具体工厂类的名称就可得到所要的产品对象,而无需知道这个对象是如何被具体实现的。
  • 系统可以在不修改具体工厂类的情况下引进新的产品。

缺点

  • 每增加一个产品,就需要增加一个具体工厂类,增加了系统的复杂度。

3. 抽象工厂模式(Abstract Factory Pattern)

抽象工厂模式提供一个接口,用于创建相关或依赖对象的家族,而不需要明确指定具体类。

优点

  • 当一个产品族中的多个对象被设计成一起工作时,它能保证客户端始终只使用同一个产品族中的对象。
  • 增加新的产品族很方便,无需修改已有系统,符合开闭原则。

缺点

  • 产品族扩展困难,要增加新的产品族必须修改接口及其下所有子类。

这样讲大家可能不太明白,下面我使用一个简单的工厂模式,你就明白了,一目了然:

eg:在我们支付的时候肯定不止一种支付方式,那么我们为了减少对象的创建,简化代码,解耦,我们就可以使用工厂模式去实现相对业务:

1.创建一个接口,用于给方法实现

2.创建需要实现接口的方法,可以根据需求定义

3.然后编写一个工具类,编写一个静态方法,用于消费者使用

4.消费者,可以根据自己的需求,使用工具类,这里我是全部使用了

5.控制台打印,可以看见,对应的值已经打印完成,这就是工厂模式的简单使用,可以结合实际情况去变化使用,无硬性编码要求

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

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

相关文章

splunk Enterprise 的HTTP收集器-windows

1.创建HTTP收集器 2.使用HTTP收集器 然后打开全局设置:把ssl给去掉,点保存(保存之后,可以看到这些状态全部都是已启用了): 3.测试: curl --location --request POST http://192.168.11.131:808…

为什么已经设置了.gitignore文件,但某些需要被忽略的文件仍然显示?如何解决.gitignore无法忽略文件?

问题描述: 某个同事,不小心把编译文件夹(这两个文件夹【uni_modules 和unpackage】)提交到了远程仓库里。导致其他人提交的时候提示了冲突。因为每个人编译出来的文件都不一样。 然后我们在.gitignore文件设置了排除这两个文件夹…

5步打造安顺旅游数据可视化分析系统——Python Django + Vue 技术

🎓 作者:计算机毕设小月哥 | 软件开发专家 🖥️ 简介:8年计算机软件程序开发经验。精通Java、Python、微信小程序、安卓、大数据、PHP、.NET|C#、Golang等技术栈。 🛠️ 专业服务 🛠️ 需求定制化开发源码提…

Modbus rtu的通信(做主站)

Modbus rtu的通信(做主站) 首先进入“设备视图”添加通讯模块RS422/RS485通讯模块,点击通讯接口,配置modbus的参数,常规→端口组态,选择“半双工(RS-485)2线制模式”,波特…

一个案例讲清楚利用电商API数据分析的逻辑

01 分析思路 通过经营整体数据、客群、商品3个方向。 目前整体的销售走势如何?都通过哪些渠道进店?整店转化率怎么样?一周内哪天最活跃?客群转化和留存如何?哪些品类和商品为主要贡献? 02 数据定义与处…

酸敏感多肽在药物递送方面的作用机制及其应用

摘要: 作为一类新型的递送载体,多肽具有丰富的生物活性、较低的免疫原性及良好的生物相容性,近年来利用多肽递送药物或基因的研究得到广泛关注。其中,具有酸敏感性的多肽,在肿瘤微环境或溶酶体的弱酸性条件下可以产生二级结构的改…

小模型血战 phi3.5暂时胜出

背景 大模型推理成本高,训练成本高,百万美金训练一次,全量微调,加载到GPU显存都成本很高,创业公司没法搞,一般的公司想到还没想到用大模型挣钱了,就要这么大投入。基本犹豫就不投入&#xff0c…

【B端产品知识总结】角色权限管理设计思想

目录 前言 一、简单的用户权限 二、基于角色的权限访问模型(RBAC) 三、RBAC模型的其他权限方案 1、用户组权限设计 2、继承角色权限设计 3、基于角色设计的约束 四、权限控制的设计 1.页面权限 2.操作权限 3.业务权限 4.数据权限 五、对于B端…

【MyBatis】转义符+缓存机制

目录 一. 特殊符号处理 二. MyBatis缓存机制 1. 什么是缓存&#xff1f; 2. 一级缓存 3. 二级缓存 一. 特殊符号处理 1. 在 mybatis 中的 xml 文件&#xff0c;一些特殊符号需要转译&#xff1a; <!--转义字符 " <" 号会报错&#xff0c;">&qu…

哪个软件可以把试卷扫描成空白卷?这几款很不错

哪个软件可以把试卷扫描成空白卷&#xff1f;在数字化学习日益普及的今天&#xff0c;将试卷扫描成空白卷成为了许多教师和学生提升学习效率的重要手段。传统的扫描仪不仅体积庞大、操作复杂&#xff0c;而且成本高昂&#xff0c;不太适合个人用户。那么要怎么做呢&#xff1f;…

图纸文件怎么加密,六款图纸加密软件推荐

在现代设计与工程领域&#xff0c;图纸和设计文件的安全性至关重要。无论是建筑设计、机械工程还是电子电路图&#xff0c;图纸泄露都可能造成无法估量的损失。因此&#xff0c;选择一款可靠的图纸加密软件是保护知识产权的首要任务。在本文中&#xff0c;我们将推荐六款备受好…

尚硅谷Java面试题第四季-Java基本功

1.服务可用性多少个9是什么意思&#xff1f; 2.Arrays.asList()把数组转换成集合大坑 代码&#xff1a; public class Arrays_BugDemo {public static void main(String[] args){List<Integer> list Arrays.asList(1,2);list.add(3);list.forEach(System.out::println…

【Notion的一些简单介绍】

&#x1f3a5;博主&#xff1a;程序员不想YY啊 &#x1f4ab;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家 &#x1f917;点赞&#x1f388;收藏⭐再看&#x1f4ab;养成习惯 ✨希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出…

鸿蒙位置服务

位置服务 1、首先申请权限 在module.json5文件下申请位置权限 "requestPermissions": [{"name": "ohos.permission.LOCATION", // 权限名称,为系统已定义的权限"reason": "$string:location_reason", // 申请权限的原因,…

别让病毒毁了你的数据,用户必备的ClamAV扫描神器!

背景 在Linux环境中&#xff0c;尽管由于其独特的权限管理和文件系统结构使得病毒感染的概率较低&#xff0c;但为了确保系统的安全性&#xff0c;尤其是在处理共享文件或邮件服务器时&#xff0c;安装和使用病毒扫描工具依然至关重要。ClamAV是一款开源的防病毒软件&#xff…

KPaaS:微服务架构下的持续集成与部署(CI/CD)应用实践

在微服务架构下&#xff0c;CI/CD&#xff08;持续集成/持续部署&#xff09;已经成为软件开发过程中的一项关键实践。这种实践不仅提高了开发团队的工作效率&#xff0c;还确保了软件的质量和安全性。通过将代码更改频繁地集成到主分支&#xff0c;开发团队可以更早地发现潜在…

oppo手机短信删除了怎么恢复?可用这2个恢复方法

日常使用OPPO手机时&#xff0c;如果不慎删除了重要的短信&#xff0c;怎么办&#xff1f;oppo手机短信删除了怎么恢复&#xff1f;今天小编就分享2种简单的恢复办法&#xff0c;帮大家找回那些被误删的短信。 方法一&#xff1a;通过oppo手机的云端备份服务恢复短信 OPPO手机…

1259:【例9.3】求最长不下降序列 动态规划

1259&#xff1a;【例9.3】求最长不下降序列 题目链接 【输入样例】 【输入样例】 14 13 7 9 16 38 24 37 18 44 19 21 22 63 15【输出样例】 max8 7 9 16 18 19 21 22 63思路&#xff1a; 确定状态&#xff1a; a[n]数组放数据&#xff0c; dp[n]数组放第i个位子前最长子序…

产品经理如何提升系统思考能力

很多工作年限比较短的产品经理&#xff0c;分析问题的时候最初看到的都是单点&#xff0c;只有积累了足够的经验和阅历后&#xff0c;才能看到单点之外的“全局”&#xff0c;才会慢慢形成自己的系统思考能力&#xff0c;才会提高自己的认知能力。 产品经理如果想往更高层面发…

nacos配置持久化到Mysql数据库

Nacos持久化配置&#xff08;Mac版本&#xff09; 一&#xff1a;生成持久化nacos数据的表 找到mysql-schema.sql表(如下图)&#xff0c;里面全部内容直接在mysql库中执行&#xff0c;生成表。 mysql-schema.sql位置&#xff1a; nacos/distribution/target/nacos-server-2.…