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

ops/2024/9/23 6:32:30/

目录标题

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

定义函数式接口

  • 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.ppmy.cn/ops/33709.html

相关文章

TypeScript 基础学习笔记:泛型 <T> vs 断言 as

TypeScript 基础学习笔记&#xff1a;泛型 <T> vs 断言 as &#x1f525; 引言 &#x1f44b; TypeScript (TS) 以其静态类型的魔力&#xff0c;让我们的代码更加健壮、易读且易于维护。今天&#xff0c;我们将深入探讨两个核心概念——泛型&#xff08;Generics&#x…

C++进阶----多态

1.多态的概念 1.1 概念 多态的概念&#xff1a;通俗来说&#xff0c;就是多种形态&#xff0c;具体点就是去完成某个行为&#xff0c;当不同类型的对象去完成时会 产生出不同的状态。 举个例子&#xff1a;比如有一个基类Animal&#xff0c;它有两个子类Dog和Cat。每个…

JavaEE >> Spring Boot 日志

日志的作用以及什么是日志 日志就是为了当程序出错的时候&#xff0c;程序员们可以通过日志看到是哪部分出现错误了&#xff0c;为了发现和定位问题。当然&#xff0c;我们还可以通过日志实现一些功能&#xff0c;如下&#xff1a; 记录系统的操作⽇志&#xff0c;⽅便数据恢…

关于位操作符的实际应用<C语言>

前言 位操作符在C语言初学阶段相对其他操作符来说&#xff0c;是一种难度比较大的操作符&#xff0c;且运用较少的一类操作符&#xff0c;但是位操作符并不是“一无是处”&#xff0c;合理运用的位操作符&#xff0c;在某些场景下可以优化算法&#xff0c;提高代码的执行效率&a…

【Python项目】基于时间序列的【大气污染预测系统】

技术简介&#xff1a;使用Python技术、B/S架构、MYSQL数据库等实现。 系统简介&#xff1a;本系统的主要使用角色为普通用户和管理员用户&#xff0c;两者的功能几乎是一致的&#xff0c;但管理员用户比普通用户多了用户管理的功能&#xff0c;可以对系统内的用户进行管理。普通…

STM32和OpenMV通信时,如何实现数据的实时同步和校验?

在STM32和OpenMV之间的通信中&#xff0c;实现数据的实时同步和校验对于确保数据的完整性和准确性至关重要。以下是一篇详细的2000字文章&#xff0c;包括策略描述和代码示例。 引言 在嵌入式系统中&#xff0c;STM32单片机通常用于执行复杂的控制任务&#xff0c;而OpenMV则…

PY32F040单片机产品介绍,LQFP封装,带LCD 驱动器

PY32F040单片机搭载了 Arm Cortex-M0内核&#xff0c;最高主频可达72 MHz&#xff0c;专为高性价比、高可靠性的系统而设计&#xff0c;符合消费市场的基本设计需求。可广泛应用于电机控制、手持设备、PC 外设、以及复杂的数字控制应用等领域。 PY32F040片内集成 UART、I2C、S…

【解决】docker一键部署报错

项目场景见&#xff1a;【记录】Springboot项目集成docker实现一键部署-CSDN博客 问题&#xff1a; 1.docker images 有tag为none的镜像存在。 2.有同事反馈&#xff0c;第一次启动docker-compose up -d 项目无法正常启动。后续正常。 原因&#xff1a; 1.服务中指定了镜像m…