【设计模式】【创建型5-2】【工厂方法模式】
文章目录
- 工厂方法模式
- 工厂方法模式的结构
- 示例
- 产品接口
- 具体产品
- 工厂接口
- 具体工厂
- 客户端代码
- 实际的使用
工厂方法模式
工厂方法模式的结构
产品(Product):定义工厂方法所创建的对象的接口。
具体产品(ConcreteProduct):实现产品接口的具体类。
工厂(Creator):声明工厂方法,返回一个产品对象。
具体工厂(ConcreteCreator):实现工厂方法,返回具体产品实例。
示例
产品接口
// 披萨接口
public interface Pizza {void prepare();void bake();void cut();void box();
}
具体产品
// 意大利披萨
public class ItalianPizza implements Pizza {public void prepare() {System.out.println("Preparing Italian Pizza");}public void bake() {System.out.println("Baking Italian Pizza");}public void cut() {System.out.println("Cutting Italian Pizza");}public void box() {System.out.println("Boxing Italian Pizza");}
}// 美国披萨
public class AmericanPizza implements Pizza {public void prepare() {System.out.println("Preparing American Pizza");}public void bake() {System.out.println("Baking American Pizza");}public void cut() {System.out.println("Cutting American Pizza");}public void box() {System.out.println("Boxing American Pizza");}
}
工厂接口
// 披萨工厂接口
public abstract class PizzaFactory {public abstract Pizza createPizza();public void orderPizza() {Pizza pizza = createPizza();pizza.prepare();pizza.bake();pizza.cut();pizza.box();}
}
具体工厂
// 意大利披萨工厂
public class ItalianPizzaFactory extends PizzaFactory {public Pizza createPizza() {return new ItalianPizza();}
}// 美国披萨工厂
public class AmericanPizzaFactory extends PizzaFactory {public Pizza createPizza() {return new AmericanPizza();}
}
客户端代码
public class PizzaStore {public static void main(String[] args) {PizzaFactory italianFactory = new ItalianPizzaFactory();PizzaFactory americanFactory = new AmericanPizzaFactory();italianFactory.orderPizza(); // 订购意大利披萨americanFactory.orderPizza(); // 订购美国披萨}
}
实际的使用
产品 具体的产品,工厂 具体的工厂
比如数据库驱动。对数据库的操作基本都是一致的。但是数据库的产品是不一样的,mysql oracle ,可以考虑工厂方法。
相关文章:
【设计模式】【创建型5-2】【工厂方法模式】
文章目录 工厂方法模式工厂方法模式的结构示例产品接口具体产品工厂接口具体工厂客户端代码 实际的使用 工厂方法模式 工厂方法模式的结构 产品(Product):定义工厂方法所创建的对象的接口。 具体产品(ConcreteProduct࿰…...
python API自动化(Pytest+Excel+Allure完整框架集成+yaml入门+大量响应报文处理及加解密、签名处理)
1.pytest数据参数化 假设你需要测试一个登录功能,输入用户名和密码后验证登录结果。可以使用参数化实现多组输入数据的测试: 测试正确的用户名和密码登录成功 测试正确的用户名和错误的密码登录失败 测试错误的用户名和正确的密码登录失败 测试错误的用户名和密码登…...
【Postman学习】
Postman是一个非常流行的API开发和测试工具,广泛用于Web服务的开发、测试和调试。它提供了一个图形界面,允许用户轻松地构建、发送和管理HTTP(S)请求,同时查看和分析响应。下面是对Postman接口测试工具的详细解释: 1. Postman简介…...
【Linux】IO多路复用——select,poll,epoll的概念和使用,三种模型的特点和优缺点,epoll的工作模式
文章目录 Linux多路复用1. select1.1 select的概念1.2 select的函数使用1.3 select的优缺点 2. poll2.1 poll的概念2.2 poll的函数使用2.3 poll的优缺点 3. epoll3.1 epoll的概念3.2 epoll的函数使用3.3 epoll的优点3.4 epoll工作模式 Linux多路复用 IO多路复用是一种操作系统的…...
IBCS 虚拟专线——让企业用于独立IP
在当今竞争激烈的商业世界中,企业的数字化运营对网络和服务器的性能有着极高的要求。作为一家企业的 IT 主管,我深刻体会到了在网络和服务器配置方面所面临的种种挑战,以及 IBCS 虚拟专线带来的革命性改变。 我们企业在业务扩张的过程中&…...
驾驭巨龙:Perl中大型文本文件的处理艺术
驾驭巨龙:Perl中大型文本文件的处理艺术 Perl,这门被亲切称为“实用提取和报告语言”的编程语言,自从诞生之日起,就以其卓越的文本处理能力闻名于世。在面对庞大的文本文件时,Perl的强大功能更是得到了充分的体现。本…...
Kafka~特殊技术细节设计:分区机制、重平衡机制、Leader选举机制、高水位HW机制
分区机制 Kafka 的分区机制是其实现高吞吐和可扩展性的重要特性之一。 Kafka 中的数据具有三层结构,即主题(topic)-> 分区(partition)-> 消息(message)。一个 Kafka 主题可以包含多个分…...
springcloud-config 客户端启用服务发现client的情况下使用metadata中的username和password
为了让spring admin 能正确获取到 spring config的actuator的信息,在eureka的metadata中添加了metadata.user.user metadata.user.password eureka.instance.metadata-map.user.name${spring.security.user.name} eureka.instance.metadata-map.user.password${spr…...
云计算 | 期末梳理(中)
1. 经典虚拟机的特点 多态(Polymorphism):支持多种类型的OS。重用(Manifolding):虚拟机的镜像可以被反复复制和使用。复用(Multiplexing):虚拟机能够对物理资源时分复用。2. 系统接口 最基本的接口是微处理器指令集架构(ISA)。应用程序二进制接口(ABI)给程序提供使用硬件资源…...
pytest测试框架pytest-order插件自定义用例执行顺序
pytest提供了丰富的插件来扩展其功能,本章介绍插件pytest-order,用于自定义pytest测试用例的执行顺序。pytest-order是插件pytest-ordering的一个分支,但是pytest-ordering已经不再维护了,建议大家直接使用pytest-order。 官方文…...
吴恩达机器学习 第三课 week2 推荐算法(上)
目录 01 学习目标 02 推荐算法 2.1 定义 2.2 应用 2.3 算法 03 协同过滤推荐算法 04 电影推荐系统 4.1 问题描述 4.2 算法实现 05 总结 01 学习目标 (1)了解推荐算法 (2)掌握协同过滤推荐算法(Collabo…...
MySQL CASE 表达式
MySQL CASE表达式 一、CASE表达式的语法二、 常用场景1,按属性分组统计2,多条件统计3,按条件UPDATE4, 在CASE表达式中使用聚合函数 三、CASE表达式出现的位置 一、CASE表达式的语法 -- 简单CASE表达式 CASE sexWHEN 1 THEN 男WHEN 2 THEN 女…...
Unity3D 游戏数据本地化存储与管理详解
在Unity3D游戏开发中,数据的本地化存储与管理是一个重要的环节。这不仅涉及到游戏状态、玩家信息、游戏设置等关键数据的保存,还关系到游戏的稳定性和用户体验。本文将详细介绍Unity3D中游戏数据的本地化存储与管理的技术方法,并给出相应的代…...
昇思25天学习打卡营第1天|初学教程
文章目录 背景创建环境熟悉环境打卡记录学习总结展望未来 背景 参加了昇思的25天学习记录,这里给自己记录一下所学内容笔记。 创建环境 首先在平台注册账号,然后登录,按下图操作,创建环境即可 创建好环境后进入即可࿰…...
ctfshow-web入门-命令执行(web59-web65)
目录 1、web59 2、web60 3、web61 4、web62 5、web63 6、web64 7、web65 都是使用 highlight_file 或者 show_source 1、web59 直接用上一题的 payload: cshow_source(flag.php); 拿到 flag:ctfshow{9e058a62-f37d-425e-9696-43387b0b3629} 2、w…...
Websocket在Java中的实践——最小可行案例
大纲 最小可行案例依赖开启Websocket,绑定路由逻辑类 测试参考资料 WebSocket是一种先进的网络通信协议,它允许在单个TCP连接上进行全双工通信,即数据可以在同一时间双向流动。WebSocket由IETF标准化为RFC 6455,并且已被W3C定义为…...
python请求报错::requests.exceptions.ProxyError: HTTPSConnectionPool
在发送网页请求时,发现很久未响应,最后报错: requests.exceptions.ProxyError: HTTPSConnectionPool(hostsvr-6-9009.share.51env.net, port443): Max retries exceeded with url: /prod-api/getInfo (Caused by ProxyError(Unable to conne…...
【Unity】Excel配置工具
1、功能介绍 通过Excel表配置表数据,一键生成对应Excel配置表的数据结构类、数据容器类、已经二进制数据文件,加载二进制数据文件获取所有表数据 需要使用Excel读取的dll包 2、关键代码 2.1 ExcelTool类 实现一键生成Excel配置表的数据结构类、数据…...
001 线性查找(lua)
文章目录 迭代器主程序 迭代器 -- 定义一个名为 linearSearch 的函数,它接受两个参数:data(一个数组)和 target(一个目标值) function linearSearch(data, target) -- 使用 for 循环遍历数组 data&…...
数据结构之链表
储备知识: 线性表 :一对一的数据所组成的关系称为线性表。 线性表是一种数据内部的逻辑关系,与存储形式无关线性表既可以采用连续的顺序存储(数组),也可以采用离散的链式存储(链表)顺序表和链表都称为线性表 顺序存储就是将数据存…...
探索前沿技术趋势:2024年最值得关注的创新应用场景
1. 生成式AI的爆发式应用 2024年最让人兴奋的技术趋势,莫过于生成式AI从实验室走向千家万户。我最近测试了十几个主流AI创作工具,发现它们已经能完成许多过去认为"只有人类能做到"的任务。比如用Midjourney生成产品设计图,只需要简…...
SVPWM/AZSPWM的simulink仿真 AZSPWM(Advanced Zero Se...
SVPWM/AZSPWM的simulink仿真 AZSPWM(Advanced Zero Sequence Pulse Width Modulation,先进零序脉宽调制)是一种改进的脉宽调制技术,主要应用于三相逆变器中,通过引入零序分量来优化输出电压的波形和性能。 AZSPWM的目标…...
3分钟快速上手:免费高效的Elasticsearch可视化工具Elasticvue终极指南
3分钟快速上手:免费高效的Elasticsearch可视化工具Elasticvue终极指南 【免费下载链接】elasticvue Elasticsearch gui for the browser 项目地址: https://gitcode.com/gh_mirrors/el/elasticvue 你是否曾经为复杂的Elasticsearch集群管理而烦恼?…...
SAP--S4/HANA
1、Webdispatcher 2、ASCS 全称:ABAP Central Services Instance(在 Java 栈中称为 SCS - Java Central Services)。 核心功能:它是 SAP 系统的“大脑”或控制中心,不包含处理具体业务对话(Dialogÿ…...
告别加班!3个Word神技巧,文档处理快人一步
如影随形地跟着那堆积如山的文档,像学生名单,课程表,教学计划,家长通知等等,这些重复性工作着实耗费了大量精力。事实上,Word当中蕴含着好些能够让你达成事半功倍效果的技巧,一旦将它们掌握住&a…...
Play Integrity Fix:高效解决Android设备认证问题的实战指南
Play Integrity Fix:高效解决Android设备认证问题的实战指南 【免费下载链接】PlayIntegrityFix Fix Play Integrity (and SafetyNet) verdicts. 项目地址: https://gitcode.com/GitHub_Trending/pl/PlayIntegrityFix 问题引入:Android设备认证的…...
ViGEmBus虚拟控制器驱动完全指南:从设备模拟到多场景应用
ViGEmBus虚拟控制器驱动完全指南:从设备模拟到多场景应用 【免费下载链接】ViGEmBus Windows kernel-mode driver emulating well-known USB game controllers. 项目地址: https://gitcode.com/gh_mirrors/vi/ViGEmBus 一、为什么需要虚拟控制器?…...
UniApp+Vue3避坑指南:为什么getAppWebview会失效?从原理到解决方案
UniAppVue3深度解析:getAppWebview失效的底层逻辑与工程化解决方案 在UniApp与Vue3的技术栈组合中,不少开发者遭遇过getAppWebview神秘失效的困境。这个看似简单的API调用问题,背后却隐藏着Vue3响应式系统变革与UniApp多端渲染机制的深层交互…...
激活函数进化史:从Sigmoid到ELU,聊聊那些年我们踩过的‘梯度消失’和‘神经元死亡’的坑
激活函数进化史:从Sigmoid到ELU,聊聊那些年我们踩过的‘梯度消失’和‘神经元死亡’的坑 神经网络的世界里,激活函数就像神经元之间的"翻译官",负责将输入信号转化为有意义的输出。但这位翻译官的脾气可不太好琢磨——…...
保姆级教程:在Ubuntu 20.04上搞定海思SS524/SS522 SDK编译与固件烧录
海思SS524/SS522开发实战:从零构建嵌入式Linux系统的完整指南 作为一名长期深耕嵌入式开发的工程师,我深知从零开始搭建一个完整的开发环境有多么令人头疼。特别是当你拿到一块全新的开发板,面对陌生的SDK和工具链时,那种既兴奋又…...
