简单工厂模式、工厂方法模式、抽象工厂模式

简介

将实例化代码提取出来,放到一个类中统一管理和维护,达到和主项目依赖关系的解耦,从而提高项目的扩展性和维护性。

工厂模式将复杂的对象创建工作隐藏起来,而仅仅暴露出一个接口供客户使用,具体的创建工作由工厂管理而对用户封装,将对象的创建和使用分离开来,降低耦合度,便于管理,能够很好的支持变化。

例如:有多种披萨实现类,有多个披萨店类,每个商店都需要依赖多种披萨。
在这里插入图片描述

加入工厂模式后,披萨店仅依赖披萨工厂类,由披萨工厂类创建披萨(依赖所有披萨实现类),这样在新增披萨类时仅需要修改披萨工厂类,不需要逐一修改披萨店类,降低了系统的耦合性。
在这里插入图片描述

1.简单工厂模式(静态工厂模式)

代码示例

public class PizzaFactory{public static Pizza getPizza(String name){if("番茄披萨".equals(name)){return new PotatoPizza();}else if ("土豆披萨".equals(name)){return new TomatoPizza();}else {return null;}}
}

2.工厂方法模式

创建一个父类工厂,把实例化功能抽象成抽象方法,将工厂实例化功能推迟到子类实现。解决存在多个不同类别工厂的问题。

代码示例

父类工厂:

public abstract class PizzaFactory{public abstract Pizza getPizza(String name);
}

子类工厂:

class BeijingPizzaFactory extends PizzaFactory{@Overridepublic Pizza getPizza(String name) {if("番茄披萨".equals(name)){return new PotatoPizza();}else if ("土豆披萨".equals(name)){return new TomatoPizza();}else {return null;}}
}

3.抽象工厂模式

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

抽象工厂更多的是一种思想,能够对多个产品进行分类。

工厂方法模式可以对单个产品进行分类,比如鼠标可以分为联想鼠标、戴尔鼠标、罗技鼠标等。而抽象工厂是对产品进行分类,比如整机可以分为联想的整机(包括键盘鼠标等一套设备)、戴尔的整机等。
在这里插入图片描述

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

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

相关文章

OJ中常用平衡树,Treap树堆详解

文章目录 Treap定义Treap的可行性Treap的构建节点定义旋转左单旋右单旋旋转的代码实现 插入插入的代码实现 删除遍历查找Treap对权值的扩展Treap对size的扩展扩展size域后的节点定义和旋转,插入,删除操作查询第k小的元素求元素的排名 查询后继、前驱Trea…

qt报错permission denied

写fk项目的时候,报这个错,然后网上查,说的是因为之前运行的qt进程没有关闭,然后我在任务管理器上查看,却没有看见有我正在运行的qt程序,我再出现清除 qmake也不可以,然后我再去删除out目录下的所…

apache-tomcat-9.0.29 安装配置教程

链接:https://pan.baidu.com/s/100buXYpn8w8xjI2KdvHk2Q?pwd2mwc 提取码:2mwc 1.将压缩包解压到指定文件夹下 2.进入bin文件夹下 3.找到setclasspath.bat文件 4.推荐用notepad打开文件,并做如下配置(可解决tomcat启动闪退问题&…

机器学习模型,超级全面总结!

机器学习是一种通过让计算机自动从数据中学习规律和模式,从而完成特定任务的方法。按照模型类型,机器学习可以分为两大类:监督学习模型和无监督学习模型。 附注:除了以上两大类模型,还有半监督学习和强化学习等其他类…

AD9371 官方例程裸机SW 和 HDL配置概述(二)

AD9371 系列快速入口 AD9371ZCU102 移植到 ZCU106 : AD9371 官方例程构建及单音信号收发 ad9371_tx_jesd -->util_ad9371_xcvr接口映射: AD9371 官方例程之 tx_jesd 与 xcvr接口映射 AD9371 官方例程 时钟间的关系与生成 : AD9371 官方…

CLIP Surgery论文阅读

CLIP Surgery for Better Explainability with Enhancement in Open-Vocabulary Tasks(CVPR2023) M norm ⁡ ( resize ⁡ ( reshape ⁡ ( F i ˉ ∥ F i ‾ ∥ 2 ⋅ ( F t ∥ F t ‾ ∥ 2 ) ⊤ ) ) ) M\operatorname{norm}\left(\operatorname{resize}\…

公开IP属地信息如何保护用户的隐私?

公开IP属地信息通常涉及与用户或组织的隐私有关,因此在公开此类信息时需要非常小心,以避免侵犯他人的隐私权。以下是触碰底线的几种情况以及如何保护网络安全和用户隐私: 个人隐私保护: 公开IP属地信息可能泄露用户的物理位置&…

nginx--install

1. ubuntu 1.1 下载并解压依赖 每个包去各自官网下载 stable 版就行。 tar xzvf nginx-1.24.0.tar.gz tar xzvf openssl-3.1.4.tar.gz tar xzvf pcre2-10.42.tar.gz tar xzvf zlib-1.3.tar.gz1.2 配置及安装 参数含义详见 nginx 官网 cd nginx-1.24.0./configure --pre…

【ES专题】ElasticSearch集群架构剖析

目录 前言阅读对象阅读导航要点笔记正文一、ES集群架构1.1 为什么要使用ES集群架构1.2 ES集群核心概念1.2.1 节点1.2.1.1 Master Node主节点的功能1.2.1.2 Data Node数据节点的功能1.2.1.3 Coordinate Node协调节点的功能1.2.1.4 Ingest Node协调节点的功能1.2.1.5 其他节点功能…

第一百六十五回 wheelChooser组件

文章目录 1. 概念介绍2. 使用方法3. 代码与效果3.1 示例代码3.2 运行效果 4. 内容总结 我们在上一章回中介绍了"如何实现Numberpicker"相关的内容,本章回中将介绍 wheelChoose组件.闲话休提,让我们一起Talk Flutter吧。 1. 概念介绍 我们在本…

pyqt5的组合式部件制作(一)

以多选一的选择器为例,来实践一下工程实用级别的组合式部件设计。自己之前做的自定义的组合式部件,结构不够简单优化,在实际的工程里面,使用部件的过程比较繁琐。所以,这里来做一个优化的实验。 之所以做这个组合部件&…

iOS实现代码混淆

iOS实现代码混淆 目录 前言 ipaguard界面概览 ipaguard启动界面 ipaguard代码混淆界面 资源文件混淆界面 重签名界面 前言 本文章向大家介绍iOS实现代码混淆,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值…