【设计模式】函数式编程范式工厂模式(Factory Method Pattern)

news/2024/5/20 8:27:23

目录标题

  • 定义函数式接口
  • 函数式接口实现类
  • 工厂类封装
  • 实际应用
  • 总结

定义函数式接口

  • ISellIPad.java
/*** 定义一个函数式接口* @param <T>*/
@FunctionalInterface
public interface ISellIPad<T> {T getSellIPadInfo();}

函数式接口实现类

  • HuaWeiSellIPad.java
public class HuaWeiSellIPad implements ISellIPad<String>{@Overridepublic String getSellIPadInfo() {System.out.println("华为IPad:getSellIPadInfo");return "华为IPad";}
}
  • HuaWeiSellIPad.java
public class XiaomiSellIPad implements ISellIPad<String>{@Overridepublic String getSellIPadInfo() {System.out.println("小米IPad:getSellIPadInfo");return "小米IPad";}
}

工厂类封装

  • SellIPadFactory.java
import java.util.HashMap;
import java.util.Map;
import java.util.function.Supplier;/*** 创建一个工厂类*/
public class SellIPadFactory {final static Map<String, Supplier<ISellIPad>> map = new HashMap<>();static {map.put("xiaomi", XiaomiSellIPad::new);map.put("huawei", HuaWeiSellIPad::new);}public static ISellIPad getInstance(String ipadName) {Supplier<ISellIPad> iPadSupplier = map.get(ipadName);if(iPadSupplier != null) {return iPadSupplier.get();}throw new IllegalArgumentException("No Such ISellIPad " + ipadName);}
}

实际应用

  • PinDuoDuoShopV3.java
public class PinDuoDuoShopV3 {public void order(String pcName){//函数式编程的好处:减少可变量的声明,能够更好的利用并行,代码更加简洁可读。ISellIPad<String> sellIPad = SellIPadFactory.getInstance(pcName);String getIpad = sellIPad.getSellIPadInfo();System.out.println("PinDuoDuoShopV3=>order=>执行完毕=>"+getIpad);}}

总结

  1. 定义函数式接口(ISellIPad.java):这个接口被 ISellIPad 类型的对象实现,该接口定义了一个 getSellIPadInfo() 方法,用于获取销售 iPad 的信息。
  2. 函数式接口实现类:(HuaWeiSellIPad.java 和 XiaomiSellIPad.java):这些类分别实现了 ISellIPad 接口,提供了针对不同品牌 iPad 的销售信息。
  3. 工厂类封装(SellIPadFactory.java):这个类创建了一个 iPad 工厂,通过传入 iPad 的名称来获取相应的 ISellIPad 实例。它使用了 Java 8 中的 Supplier 函数式接口来提供实例化对象的方法。
  4. 实际应用(PinDuoDuoShopV3.java):这个类展示了如何使用工厂类来订购 iPad。通过调用 SellIPadFactory.getInstance(pcName) 来获取相应品牌的 iPad 实例,然后执行 getSellIPadInfo() 方法来获取销售信息。

在这里插入图片描述


http://www.mrgr.cn/p/58887088

相关文章

Windows如何通过wsl2迅速启动Docker desktop的PHP的Hyperf项目容器?

一、安装WSL 什么是WSL&#xff1f; 官网&#xff1a;什么是WSL&#xff1f; Windows Subsystem for Linux (WSL) 是一个在Windows 10和Windows 11上运行原生Linux二进制可执行文件的兼容性层。 换句话说&#xff0c;WSL让你可以在Windows系统上运行Linux环境&#xff0c;而无需…

2022年最新的Asp.Net程序员学习路线图

给大家分享一个微软MVP整理的,2022年最新的Asp.Net程序员学习路线图。这个图的知识点,分为:1、个人必须掌握 2、进一步学习 3、兴趣 4、其他 5、可能需要学习。第1、2部分大家必须去掌握起来,其他的内容可以根据工作的需要、兴趣选择。 在Github已经针有人对路线图的每一个…

【复杂网络】如何用简易通俗的方式快速理解什么是“相对重要节点挖掘”?

什么是相对重要节点&#xff1f; 一、相对重要节点的定义二、如何区分相对重要节点与重要节点&#xff1f;1. 相对重要性与节点相似性2. 识别相对重要节点的两个阶段第一阶段&#xff1a;个体重要性值的计算第二阶段&#xff1a;累积重要性值的计算 三、相对重要节点挖掘算法1.…

【JAVA语言-第20话】多线程详细解析(二)——线程安全,非线程安全的集合转换成线程安全

目录 线程安全 1.1 概述 1.2 案例分析 1.3 解决线程安全 1.3.1 synchronized关键字 1.3.1.1 同步代码块 1.3.1.2 同步方法 1.3.2 使用Lock锁 1.3.2.1 概述 代码示例 1.4 线程安全的类 1.4.1 非线程安全集合转换成线程安全集合 线程安全 1.1 概述 指如果有多…

微信视频号怎么开店卖东西的?从开店到发货,具体流程来了

这两年&#xff0c;视频号逐渐展露头角&#xff0c;发展短&#xff0c;商家少&#xff0c;很多类目都没被商家占领&#xff0c;于是好多想创业的新手玩家就准备去视频号小店这个新平台闯一闯 那视频号小店是怎么开店卖东西的&#xff1f;今天我就给大家讲一讲视频号小店的正确…

Vue从入门到实战Day01

一、Vue快速上手 1. vue概念 概念&#xff1a;Vue是一个用于 构建用户界面的 渐进式 框架 构建用户界面&#xff1a;基于数据动态渲染页面渐进式&#xff1a;循序渐进的学习框架&#xff1a;一套完整的项目解决方案&#xff0c;提升开发效率 优点&#xff1a;大大提升开发效…

Star-CCM+通过将所有部件创建一个区域的方式分配至区域后发热功率的赋值方法介绍

前言 Star-CCM通过将所有部件创建一个区域的方式分配至区域后发热功率的赋值方法与上文介绍的方法基本一致。 赋值热源 ● 热源类型选择&#xff1a; 本文按照“总热源”的类型展开介绍。具体的操作方式如下图1所示&#xff0c;在区域内下的物理条件中的能量源选项选择总热…

API安全

一&#xff0c;什么是API API指的是应用程序编程接口&#xff08;Application Programming Interface&#xff09;&#xff0c;是一组定义了软件组件如何相互交互的规范。通过API&#xff0c;不同的软件可以相互通信和交换数据&#xff0c;实现不同软件之间的集成和互操作。 …

机器学习 | 时间序列预测中的AR模型及应用

自回归模型&#xff0c;通常缩写为AR模型&#xff0c;是时间序列分析和预测中的一个基本概念。它们在金融、经济、气候科学等各个领域都有广泛的应用。在本文中&#xff0c;我们将探索自回归模型&#xff0c;它们如何工作&#xff0c;它们的类型和实际例子。 自回归模型 自回…

英语学习笔记6——What make is it?

What make is it? 它是什么牌子的&#xff1f; make n.&#xff08;产品的&#xff09;品牌名称    v. 制作 区别&#xff1a;model n.&#xff08;产品的&#xff09;型号       n. 模型       n. 模特 make 指的是大的品牌名称&#xff0c; model 是旗下产品…

小组练习:拿出手机发朋友圈/微信群, 收集你的目标用户对你当前产品的NPS。 每个项目小组收集不少于

小组练习: 拿出手机发朋友圈/微信群, 收集你的目标用户对你当前产品的NPS。 每个项目小组收集不少于 30 条投票,截图展示 在学习通提交解答的同时,可以同步发布在团队和个人博客上,作为学习心得体会,记录下来。 我的答案: 【第二组】 NPS(Net Promoter Score)是一种用来…

商超物联网方案-Hotspot Service和客流分析方案概述

商超物联网方案-Hotspot Service和客流分析方案概述 场景概述 大型商场、大型综合体在相互竞争及线上消费的影响下&#xff0c;利润增长缓慢&#xff0c;迫切需要通过提供个性化服务提升顾客购物体验&#xff0c;促进利润增长。 向不同顾客推送其感兴趣的广告&#xff0c;不仅…

python在Scikit-learn中用决策树和随机森林预测NBA获胜者

原文链接:http://tecdat.cn/?p=5222 原文出处:拓端数据部落公众号在本文中,我们将以Scikit-learn的决策树和随机森林预测NBA获胜者。美国国家篮球协会(NBA)是北美主要的男子职业篮球联赛,被广泛认为是首屈一指的男子职业篮球联赛在世界上。它有30个队(美国29个,加拿大…

【Azure Function】Azure Function中的Timer Trigger无法自动触发问题

问题描述 在Azure Function中,部署了定时触发器函数(Timer Trigger),却无法按时触发。问题解答 登录Function的Kudu站点,查看 logfiles中 application/function/host目录下的日志文件,发现错误消息:Singleton lock renewal failed for blob xxxxxxxxxxxxxxxxxxxxxxxxxxxxx…

自学错误合集--项目打包报错,运行报错持续更新中

java后端自学错误总结 一.项目打包报错2.项目打包之后运行报错 二.项目运行报错 一.项目打包报错 javac: &#xfffd;Ҳ&#xfffd;&#xfffd;&#xfffd;&#xfffd;ļ&#xfffd;: E:\xx\xx\xx\docer-xx\src\main\java\xx\xx\xx\xx\xx\xx.java &#xfffd;&#xff…

ESP32-C6测评-环境安装

import time from machine import Pinled=Pin(15,Pin.OUT)while True:led.value(1)time.sleep(0.01)led.value(0)time.sleep(0.3)

Transformer 解析 超级详细版

推荐学习视频 汉语自然语言处理-从零解读碾压循环神经网络的transformer模型(一)- 注意力机制-位置编码-attention is all you need_哔哩哔哩_bilibili 目录 首先下transformer和LSTM的最大区别是什么&#xff1f; 1.positional \ encoding, 即位置嵌入(或位置编码); 2 自注…

国产持续集成工具 - Gokins

国产持续集成工具 - Gokins 持续集成(Continuous Integration ,CI) 介绍 在传统软件开发过程中,集成通常发生在每个人都完成了各自的工作之后。在项目尾声阶段,通常集成还要痛苦的花费数周或者数月的时间来完成。持续集成是一个将集成提前至开发周期的早期阶段的实践方式,…

链表面试题目:反转一个单链表的两种方法(解析+代码)

我们继续来看一下单链表的题目和代码吧&#xff0c;把学习的知识运用到实际中&#xff0c;大家加油 先看OJ题目 OJ题目&#xff08;反转单链表&#xff09; 双指针法 1.创建两个指针&#xff0c;为pre curr&#xff0c;curr指向头结点&#xff0c;curr用来遍历链表 2.curr指向…