【设计模式】【创建型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 ,可以考虑工厂方法。

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

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

相关文章

Redis 集群模式

一、集群模式概述 Redis 中哨兵模式虽然提高了系统的可用性,但是真正存储数据的还是主节点和从节点,并且每个节点都存储了全量的数据,此时,如果数据量过大,接近或超出了 主节点 / 从节点机器的物理内存,就…

个人网站制作 Part 28 添加用户活动跟踪功能 | Web开发项目添加页面缓存

文章目录 👩‍💻 基础Web开发练手项目系列:个人网站制作🚀 添加用户活动跟踪功能🔨使用分析工具🔧步骤 1: 选择分析工具🔧步骤 2: 注册Google Analytics账户🔧步骤 3: 获取Analytics…

Java面试题--JVM大厂篇之深入了解G1 GC:高并发、响应时间敏感应用的最佳选择

引言: 在现代Java应用的性能优化中,垃圾回收器(GC)的选择至关重要。对于高并发、响应时间敏感的应用而言,G1 GC(Garbage-First Garbage Collector)无疑是一个强大的工具。本文将深入探讨G1 GC适…

李一桐遭遇蜈蚣惊魂

李一桐遭遇“蜈蚣惊魂”!刘宇宁展现真男人本色在娱乐圈的幕后,总有一些心跳加速的惊险。近日,李一桐在拍戏时遭遇了一场“蜈蚣惊魂”,让无数粉丝和网友为她捏了一把冷汗。而在这场惊险的遭遇中,刘宇宁展现出了真男人的…

NOI大纲——普及组——二叉搜索树

二叉搜索树 二叉搜索树(Binary Search Tree,简称BST)是一种特殊的二叉树,它具有以下几个特点: 节点的左子树上的所有节点的值都小于或等于该节点的值。节点的右子树上的所有节点的值都大于或等于该节点的值。每个节点…

ActiveMq工具之管理页面说明

文章目录 安装ActiveMQ一: 访问管理页面二: 进入管理页面,主页三: Queues页说明四: Topics页说明五: Subscribers页说明 安装ActiveMQ wget https://archive.apache.org/dist//activemq/5.13.3/apache-activemq-5.13.3-bin.tar.gz wget https://mirrors.huaweiclou…

为什么越来越多的企业选择外包?赋能企业未来

软件开发过程包括设计需求、设计方案、产品研发、产品交付、后期维护,许多企业并沒有软件开发的专业能力与工作经验,将软件开发工作进行外包是比较节约成本的,企业能少走不少弯路。 YesPMP平台(一站式软件外包、项目外包服务-YesP…

UWA Pipeline 2.6.1版本更新

UWA Pipeline是专为游戏开发团队设计的本地协作平台,旨在帮助团队建立专业的DevOps研发交付流水线。本平台提供了可视化的CI/CD操作界面,高可用的自动化测试和无缝集成的UWA性能保障服务等核心功能。 在最新的Pipeline更新中,UWA引入了参数配…

protobufjs解析proto消息出错RangeError: index out of range: 2499 + 10 > 2499解决办法

使用websocket通讯传输protobuf消息的时候,decode的时候出错了: RangeError: index out of range: 2499 10 > 2499 Error: invalid wire type 4 at offset 1986 出现这种错误的时候,99%是因为proto里面的消息类型和服务端发送的消息类型不…

vue表头字段添加鼠标悬浮提示

<el-table-column prop"jfScore" align"center" min-width"100px"><template slot"header" slot-scope"scope"><div><span>信用积分</span><el-tooltip:aa"scope"class"it…

Java错题归纳(二)

1、若有如下接口A的定义&#xff0c;下列哪些类下确实现了该接口&#xff1a;C interface A { void method1(int i); void method2(int j); } A class B implements A{ void method1( ) { } void method2( ) { } } B class B implements A { void method1(int i ) { }…

关于windows,wifi图标显示不了的解决方法

解决方法一&#xff08;解决了我的问题的方法&#xff09;&#xff1a; winr -->输入 regedit 打开注册表 --> 删除HKEY-CLASSES_ROOT\CLSID\{3d09c1ca-2bcc-40b7-b9bb-3f3ec143a87b} CLSID在下面仔细找&#xff0c;然后找到09开头那个删掉重启就可以了&#xff0c;可能…

别小看ai智能语音机器人但也别神话它电销机器人部署语音识别‘次数活动

人类社会的发展不断在加速&#xff0c;现代人对新事物接纳的速度变得越来越快&#xff0c;进而对新事物、新模式的期待也越来越多、频率越来越高。 仅聚焦在电销领域&#xff0c;当将视线回拨&#xff0c;我们会发现作为新技术与新模式的代表&#xff0c;电销从20世纪中后期引进…

CAS服务端部署

部署CAS Cas服务端其实就是一个war包。 在资源\cas\source\cas-server-4.0.0-release\cas-server-4.0.0\modules目录下cas-server-webapp-4.0.0.war 将其改名为cas.war放入tomcat目录下的webapps下。启动tomcat自动解压war包。浏览器输入 登录页面 http://localhost:8080/ca…

nuxt3搭建和部署

Nuxt 3是一个基于Vue 3的静态网站生成框架&#xff0c;它提供了高性能、SEO友好的Web应用程序开发体验。Nuxt 3重写了许多核心代码&#xff0c;增加了新功能&#xff0c;如基于Vite的构建系统、改进的路由系统、数据获取和插件系统。它支持TypeScript和多种渲染模式&#xff08…

20240701 每日AI必读资讯

&#x1f3eb;AI真炼丹&#xff1a;整整14天&#xff0c;无需人类参与 - 英矽智能推出全球首个AI参与决策的生物学实验室&#xff0c;实现了14天内完成靶点发现和验证的全自动化闭环实验。 - 该实验室由PandaOmics平台驱动&#xff0c;集成多种预测模型和海量数据&#xff0…

conda安装d2l教程

前言 提前安装anaconda为什么直接安装d2l会出错&#xff1f;- 因为python版本问题&#xff0c;最好的解决办法就是利用conda来建立一个虚拟的环境 第一步 创建新的虚拟环境 打开conda命令行&#xff0c;也就是anaconda prompt输入下面的命令 conda create --name d2l pytho…

【Python】从基础到进阶(二):了解Python语言基础以及数据类型转换、基础输入输出

&#x1f525; 个人主页&#xff1a;空白诗 文章目录 一、引言二、基本数据类型转换1. 隐式转换2. 显式转换 三、基本输入输出1. 输入&#xff08;input&#xff09;2. 输出&#xff08;print&#xff09;3. 案例&#xff1a;输入姓名、年龄、身高以及体重&#xff0c;计算BMI指…

《从零开始学习大语言模型》专栏来啦!

欢迎来到我的专栏LLM-from-scratch&#xff0c;这是一个致力于从零开始学习和掌握大语言模型的知识宝库。无论你是刚入门的新手&#xff0c;还是想要深入了解的高级用户&#xff0c;这里都有适合你的内容。以下是专栏的精彩章节&#xff1a; LLM-from-scratch-1.图解tokenizat…

DM表级触发器

可以理解为行变动级 触发体中写逻辑 这是表修改时调用存储过程 感谢大哥分享: https://blog.csdn.net/WuLex/article/details/83181449 感谢大哥分享: https://blog.csdn.net/ChennyWJS/article/details/131913198