23种设计模式之工厂方法模式

news2024/12/23 6:35:01

前言:大家好,我是小威,24届毕业生,在一家满意的公司实习。本篇文章将23种设计模式中的工厂方法模式,此篇文章为一天学习一个设计模式系列文章,后面会分享其他模式知识。
如果文章有什么需要改进的地方还请大佬不吝赐教👏👏。
小威在此先感谢各位大佬啦~~🤞🤞
在这里插入图片描述

🏠个人主页:小威要向诸佬学习呀
🧑个人简介:大家好,我是小威,一个想要与大家共同进步的男人😉😉
目前状况🎉:24届毕业生,在一家满意的公司实习👏👏

💕欢迎大家:这里是CSDN,我总结知识的地方,欢迎来到我的博客,我亲爱的大佬😘

以下正文开始

文章目录

在这里插入图片描述

工厂模式是一种创建型设计模式,它提供了一种创建对象的最佳方式,而无需将对象的创建逻辑暴露给客户端。使用工厂模式,我们可以将对象的创建和使用分离开来,从而提高代码的可维护性和可扩展性。

在工厂模式中,我们定义一个工厂类,该工厂类负责创建对象。客户端通过调用工厂类的静态方法来获取所需的对象,而不是直接调用对象的构造函数。这样,客户端就不需要了解对象的创建过程,只需要知道如何使用该对象即可。

工厂模式通常分为三种类型:简单工厂模式、工厂方法模式和抽象工厂模式。其中,工厂方法模式是最常用的一种类型。

简单工厂模式:简单工厂模式是一种创建型模式,它提供了一个统一的工厂类来创建不同类型的对象。客户端只需要知道所需对象的类型即可,无需知道对象的创建过程。

工厂方法模式:工厂方法模式是一种创建型模式,它定义了一个接口用于创建对象,但是将对象的创建过程延迟到子类中实现。这样,客户端只需要知道所需对象的类型即可,无需知道对象的具体创建过程。

抽象工厂模式:抽象工厂模式是一种创建型模式,它提供了一种创建一系列相关或相互依赖对象的接口,而无需指定它们的具体类。该模式涉及到一个抽象工厂类,它定义了一个工厂方法用于创建产品,而具体的产品则由其子类来创建。

假设我们正在开发一个咖啡店的系统,需要根据用户的选择来制作不同种类的咖啡,比如美式咖啡、拿铁咖啡、卡布奇诺等。我们可以定义一个抽象的咖啡类,然后针对每种咖啡都定义一个具体的咖啡类。具体的咖啡类需要实现咖啡类中定义的抽象方法,用来制作不同种类的咖啡。

下面是咖啡类的定义:

public abstract class Coffee {
    // 制作咖啡
    public abstract void makeCoffee();
}

下面是具体的咖啡类的定义:

public class AmericanCoffee extends Coffee {
    @Override
    public void makeCoffee() {
        System.out.println("制作美式咖啡");
    }
}

public class LatteCoffee extends Coffee {
    @Override
    public void makeCoffee() {
        System.out.println("制作拿铁咖啡");
    }
}

public class CappuccinoCoffee extends Coffee {
    @Override
    public void makeCoffee() {
        System.out.println("制作卡布奇诺咖啡");
    }
}

接下来,我们需要一个工厂类来根据用户的选择来创建不同种类的咖啡。这个工厂类就是工厂方法模式中的工厂类。下面是工厂类的定义:

public interface CoffeeFactory {
    // 创建咖啡
    Coffee createCoffee();
}

public class AmericanCoffeeFactory implements CoffeeFactory {
    @Override
    public Coffee createCoffee() {
        return new AmericanCoffee();
    }
}

public class LatteCoffeeFactory implements CoffeeFactory {
    @Override
    public Coffee createCoffee() {
        return new LatteCoffee();
    }
}

public class CappuccinoCoffeeFactory implements CoffeeFactory {
    @Override
    public Coffee createCoffee() {
        return new CappuccinoCoffee();
    }
}

工厂类中定义了一个抽象的创建咖啡的方法,具体的工厂类需要实现这个方法来创建不同种类的咖啡。

最后,我们可以通过工厂类来创建不同种类的咖啡,如下所示:

public class Main {
    public static void main(String[] args) {
        CoffeeFactory factory = new AmericanCoffeeFactory();
        Coffee coffee = factory.createCoffee();
        coffee.makeCoffee();
    }
}

这里创建了一个美式咖啡工厂,然后使用这个工厂来创建一个美式咖啡对象,并调用makeCoffee()方法来制作咖啡。如果需要制作其他种类的咖啡,只需要更换工厂类即可。这样就实现了对象的创建与使用分离,提高了系统的灵活性和可维护性。

好了,本篇文章就先分享到这里了,后续将会继续介绍23种设计模式之其他模式,感谢大佬认真读完支持咯~
在这里插入图片描述

文章到这里就结束了,如果有什么疑问的地方请指出,诸佬们一起讨论😁
希望能和诸佬们一起努力,今后我们顶峰相见🍻
再次感谢各位小伙伴儿们的支持🤞

在这里插入图片描述

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

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

相关文章

水提金银花多糖通过调节NLRP3-IL-17信号轴减轻过敏性鼻炎

文章标题:Water-extracted Lonicera japonica polysaccharide attenuates allergic rhinitis by regulating NLRP3-IL-17 signaling axis 发表期刊:Carbohydrate Polymers 影响因子:10.723 作者单位:遵义医科大学 百趣提供服务…

五、Spring Cloud Alibaba-Feign

引入 基于之前的学习,我们目前调用是通过restTemplate硬编码方式调用的。 restTemplate.getForObject("http://stock-service/stock/reduce", String.class);还是很不方便,考虑直接用service.方法进行调用,从而引出Feign&#xff…

vue+elementui+nodejs校园高校餐厅点餐及订餐菜品推荐评价系统6927k

传统的销售模式,在实体店的紧跟式的销售模式,会给消费者一种不自由,被监视的感觉。餐厅点餐及推荐系统,紧跟数据时代的步伐,使用nodejs开发语言,配备MySQL数据库。扎根于实际问题所开发出来的一套系统。这个…

总结845

学习目标: 月目标:5月(张宇强化前10讲,背诵15篇短文,熟词僻义300词基础词) 周目标:张宇强化前3讲并完成相应的习题并记录,英语背3篇文章并回诵 每日必复习(5分钟&#…

Windows 10 安装 MySQL

确认是否已安装 MySQL (1)按【winr】快捷键打开运行; (2)输入 services.msc; (3)点击【确定】,在打开的服务列表中查找 mysql 服务,如果没有 mysql 服务&…

HTAP for MySQL 在腾讯云数据库的演进

摘要:MySQL在充分利用多核计算资源方面比较欠缺,无法同时满足在线业务和分析型业务的客户需求,而单独部署一套专用的分析型数据库意味着额外的成本和复杂的数据链路。本次主题将介绍腾讯云数据库为满足此类场景而在HTAP for MySQL产品方面进行…

【数据挖掘与商务智能决策】第十五章 智能推荐系统 - 协同过滤算法

第十五章 智能推荐系统 - 协同过滤算法 15.2 相似度计算三种常见方法 15.2.1 欧式距离 import pandas as pd df pd.DataFrame([[5, 1, 5], [4, 2, 2], [4, 2, 1]], columns[用户1, 用户2, 用户3], index[物品A, 物品B, 物品C]) df用户1用户2用户3物品A515物品B422物品C421 …

【AI大模型】SparkDesk讯飞星火认知大模型初体验-持续更新

文章目录 SparkDesk讯飞星火认知大模型简介语言理解知识问答逻辑推理数学题解答代码理解与编写写在最后 SparkDesk讯飞星火认知大模型简介 科大讯飞推出的新一代认知智能大模型,拥有跨领域的知识和语言理解能力,能够基于自然对话方式理解与执行任务。从海…

6.其他函数

1.时间日期类 -- current_date() 返回当前日期 -- date_add(date, n) 返回从date开始n天之后的日期 -- date_sub(date, n) 返回从date开始n天之前的日期 -- datediff(date1, date2) 返回date1-date2的日期差 -- year(date) 返回…

港联证券|“牛市旗手”频遭股东减持 机构仍看好板块后市表现

5月8日,证券板块再迎爆发。截至收盘,中国银河盘中触及涨停,收盘涨超7%,中银证券涨超5%,信达证券、光大证券、招商证券涨超4%。板块回暖之际,多家券商二季度却遭遇股东减持。业内人士认为,减持计…

算法--扫描线

写在前面: 这个算法理解还是挺好理解的,就是到后面解决面积并问题的时候开始难理解了,看了半天,主要是还有其他的知识没理解就开始搞这个了。虽然最后还是直接懂了。 文章目录 扫描线算法的介绍一维问题LintCode 391 数飞机题目…

【历史上的今天】5 月 9 日:中国黄页上线;Red Hat 创始人出生;Scratch 2.0 发布

整理 | 王启隆 透过「历史上的今天」,从过去看未来,从现在亦可以改变未来。 今天是 2023 年 5 月 9 日,在 1993 年的今天,第一届东亚运动会在上海隆重开幕,这是亚洲体育运动史上的新篇章。来自东亚地区的中国、日本、…

【笔记】【HTTP】《图解HTTP》第5章 与HTTP协做的Web服务器

前言 有输入就要有产出,该笔记是本人看完《图解HTTP》后对每章涉及到的知识进行汇总博客将会已书的每章为一篇发布,下一篇博客发布时间不确定笔记中有些个人理解后整理的笔记,可能有所偏差,也恳请读者帮忙指出,谢谢。…

信号signal编程测试

信号会打断系统调用,慎用,就是用的时候测一测。 下面是信号的基础测试 信号 信号(signal)机制是UNIX系统中最为古老的进程之间的通信机制。它用于在一个或多个进程之间传递异步信号。信号可以由各种异步事件产生,例如…

数据结构与算法1:引入概念

接下来系统的学一下数据结构与算法的知识,本章节是第一部分:数据结构与算法的进入与基本概述 第一章:引入概念 【铁打的算法demo】先来看到题: 如果 a b c 1000,且 a2 b2 c2(a, b , c 为⾃然数&…

快进来,带你了解FPGA基础知识---lattice莱迪斯深力科MachXO2 FPGA系列简介

FPGA基础知识---lattice莱迪斯深力科MachXO2 LCMXO2-4000HC-4TG144I FPGA简介 FPGA基础知识:FPGA是英文Field-Programmable Gate Array的缩写,即现场可编程门阵列,它是在PAL、GAL、CPLD等可编程器件的基础上进一步发展的产物。它…

《程序员面试金典(第6版)》面试题 16.17. 连续数列(贪心算法思想,动态规划算法思想,C++)

题目描述 给定一个整数数组,找出总和最大的连续数列,并返回总和。 示例: 输入: [-2,1,-3,4,-1,2,1,-5,4] 输出: 6 解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。进阶: 如果你已经实…

elementUI tabs切换 echarts宽度挤压到一起 由100%变成100px

被压缩的图表&#xff1a; 正常显示 <el-tabs v-model"activeName" type"card" tab-click"handleClick"><el-tab-pane name"first"></el-tab-pane><el-tab-pane name"second" label"未达成原因…

如何在Kali Linux中获得root权限?

根用户名或账户在Linux或任何其他类似Unix的操作系统中拥有所有可用命令和文件的默认权限。它也被称为超级用户、根账户和根用户。用户名&#xff1a;"kali "是登录新Kali系统的标准凭证。这建立了一个用户 "kali "的会话&#xff0c;你必须在 "Sudo …

Java—JDK8新特性—方法引用【内含思维导图】

目录 4.方法引用 思维导图 4.1 什么是方法引用 4.2 为什么要使用方法引用 4.3 方法引用语法 4.4 方法引用的5种情况使用示例 4.方法引用 思维导图 4.1 什么是方法引用 方法引用就是Lambda表达式&#xff0c;也就是函数式接口的一个实例&#xff0c;通过方法的名称来指向一…