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

embedded/2024/9/23 5:19:47/

目录标题

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

定义函数式接口

  • 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/embedded/33140.html

相关文章

STM32解决空闲中断误触发问题.

在用串口传输大量数据时&#xff0c;发现空闲中断误触发 我是在做用串口将大量数据传入MCU这易操作时&#xff0c;发现一帧数据还没发完成&#xff0c;就进如来空闲中断&#xff0c;导致数据不完整&#xff0c;有点数据混乱了。 参考别的博主说法&#xff0c;在1个或1.5个字节时…

自然科学领域基于ChatGPT大模型的科研绘图

以ChatGPT、LLaMA、Gemini、DALLE、Midjourney、Stable Diffusion、星火大模型、文心一言、千问为代表AI大语言模型带来了新一波人工智能浪潮&#xff0c;可以面向科研选题、思维导图、数据清洗、统计分析、高级编程、代码调试、算法学习、论文检索、写作、翻译、润色、文献辅助…

TypeScript 泛型:深入理解与应用

TypeScript&#xff08;简称TS&#xff09;是一种由微软开发的静态类型检查的编程语言&#xff0c;它是JavaScript的一个超集&#xff0c;它添加了可选的静态类型系统和基于类的面向对象编程。泛型是TypeScript的一个核心特性&#xff0c;它允许你定义灵活的、可重用的组件。在…

Ubuntu22.04 Jammy新装之后apt不起作用

解决问题&#xff1a;Ubuntu22.04 Jammy新装之后apt不起作用 新安装好Ubuntu22.04 Jammy版本后&#xff0c;发现apt无法使用。 先在个人账户里sudo apt search nvidia 没有显示 跑到root账户apt search nvidia 还是没有显示 测试安装wget&#xff1a; rootfb14:/# apt inst…

嵌入式学习day10

每日面试题 局部变量能否与全局变量重名&#xff1f; 能&#xff0c;局部变量会屏蔽全局变量&#xff0c;要使用全局变量&#xff0c;需要使用“::”&#xff0c;局部变量可以与全局变量同名&#xff0c;在函数内引用这个变量时&#xff0c;会用到同名的局部变量&#xff0c;…

xss漏洞简介

漏洞简介 跨站脚本&#xff08;Cross-site scripting ,简称 XSS&#xff09;是一种经常出现在Web应用程序中的计算机安全漏洞&#xff0c;是由于web应用程序对用户的输入过滤不足而产生的&#xff0c;是代码注入的一种&#xff0c;XSS就是攻击者利用网站漏洞把恶意脚本代码&am…

linux中各类查看用户的命令(随手记)

在Linux系统中&#xff0c;查看用户信息的命令有很多&#xff0c;而且显示的内容各有各的区别&#xff1a; whoami&#xff1a; 显示当前用户的用户名。 whoamiid&#xff1a; 显示当前用户的UID、GID以及用户和组的名称。 idwho&#xff1a; 显示当前登录的所有用户的信息&…

思考题 —— Windows 登录密码

1.windows登录的明文密码&#xff0c;存储过程是怎么样的&#xff1f;密文存放在哪个文件下&#xff1f;该文件是否可以打开&#xff0c;并且查看到密文&#xff1f; 系统通过保存密码的哈希值来确保安全性&#xff0c;进行加密存储的方法通常为NTLM或Kerberos身份认证协议。该…