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

devtools/2024/9/22 8:34:52/

目录标题

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

定义函数式接口

  • 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/devtools/33631.html

相关文章

【C++】详解STL的容器之一:list

目录 简介 初识list 模型 list容器的优缺点 list的迭代器 常用接口介绍 获取迭代器 begin end empty size front back insert push_front pop_front push_back pop_back clear 源代码思路 节点设计 迭代器的设计 list的设计 begin() end() 空构造 ins…

java-Spring-mvc-(请求和响应)

目录 &#x1f4cc;HTTP协议 超文本传输协议 请求 Request 响应 Response &#x1f3a8;请求方法 GET请求 POST请求 &#x1f4cc;HTTP协议 超文本传输协议 HTTP协议是浏览器与服务器通讯的应用层协议&#xff0c;规定了浏览器与服务器之间的交互规则以及交互数据的格式…

集成学习算法:AdaBoost详解以及代码实现

本文尽量从一个机器学习小白或是只对机器学习算法有一个大体浅显的视角入手&#xff0c;尽量通俗易懂的介绍清楚AdaBoost算法&#xff01; 一、AdaBoost简介 AdaBoost&#xff0c;是英文"Adaptive Boosting"&#xff08;自适应增强&#xff09;的缩写&#xff0c;由…

Codeforces Round 942 (Div. 2) A~D1

A. Contest Proposal Problem - A - Codeforces 题目大意&#xff1a; 给定数组ai和bi&#xff0c;这俩数组都是非递减的。每次操作可以在ai的前面放上任意数字w&#xff0c;并删去a数组末尾的元素&#xff0c;求最少多少次操作让ai<bi。 思路&#xff1a; 模拟几个样例之后…

【Linux】进程间通信 - 管道

文章目录 1. 进程间通信介绍1.1 进程间通信目的1.2 进程间通信发展1.3 进程间通信分类 2. 管道2.1 什么是管道2.2 匿名管道2.3 用 fork 来共享管道原理2.4 站在文件描述符角度 - 深入理解管道2.5 站在内核角度 - 管道本质2.6 管道读写规则2.7 管道特点 3. 命名管道3.1 匿名管道…

Rust : 声明宏在不同K线bar类型中的应用

Rust的宏功能博大精深。在K线bar中&#xff0c;往往有很多不同分时k线图&#xff0c;比如1&#xff0c;2&#xff0c;3&#xff0c;5&#xff0c;。。。。60&#xff0c;120&#xff0c;250&#xff0c;300…。。不同分钟类型。 如果不用宏&#xff0c;那么手写会比较麻烦。下面…

学习java第六十一天

什么是控制反转(IOC)&#xff1f;什么是依赖注入&#xff08;DI&#xff09;&#xff1f; IoC(Inversion of Control) – 控制反转。它不是一种技术&#xff0c;而是一种思想。 IOC&#xff1a;就是对象之间的依赖关系由容器来创建&#xff0c;对象之间的关系本来是由我们开发者…

JavaScript继承的方法和优缺点

原型链继承 让一个构造函数的原型是另一个类型的实例&#xff0c;那么这个构造函数new出来的实例就具有该实例的属性。 优点&#xff1a; 写法方便简洁&#xff0c;容易理解。 缺点&#xff1a; 在父类型构造函数中定义的引用类型值的实例属性&#xff0c;会在子类型原型上…