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

server/2024/9/23 4:42:09/

目录标题

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

定义函数式接口

  • 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/server/32849.html

相关文章

分布式锁之-redis

什么是分布式锁&#xff1f; 即分布式系统中的锁。在单体应用中我们通过锁解决的是控制共享资源访问的问题&#xff0c;而分布式锁&#xff0c;就是解决了分布式系统中控制共享资源访问的问题。与单体应用不同的是&#xff0c;分布式系统中竞争共享资源的最小粒度从线程升级成了…

kan 这是什么(想多了哈哈)

代码 import paddleclass Xus(paddle.nn.Layer):def __init__(self, head, head_dim):super().__init__()self.x_layer paddle.nn.Linear(head_dim, head * head_dim, bias_attrFalse)self.s_layer paddle.nn.Linear(head_dim, head * head_dim, bias_attrFalse)self.u_laye…

MaxKB宝塔Docker安装并配置域名访问

准备 Linux系统 bt面板 默认环境LNMP随便装 服务器环境配置最好是4G&#xff0c; 占用硬盘存储大概1G 对于一些海外AI产品的对接需要使用香港或者海外的服务器 安装 在宝塔面板中打开SSH或者你本地使用SSH工具去链接服务器 运行docker命令 前提是放开服务器的8080端口 doc…

【设计模式】之装饰器模式

系列文章目录 【设计模式】之模板方法模式 【设计模式】之责任链模式 【设计模式】之策略模式 【设计模式】之工厂模式&#xff08;三种&#xff09; 前言 今天给大家介绍23种设计模式中的装饰器模式。&#x1f308; 一、什么是装饰器模式 装饰器模式&#xff08;Decora…

netbeans中add server instance界面为什么让创建一个user

在NetBeans中&#xff0c;“Add Server Instance”&#xff08;添加服务器实例&#xff09;界面要求创建一个用户&#xff0c;是为了配置服务器实例的运行环境和访问权限。 创建一个用户是为了确保服务器实例能够以安全的方式运行&#xff0c;并限制对服务器的访问。通过创建一…

Elasticsearch 数据聚合

Bucket聚合&#xff08;桶聚合&#xff09; 对文档做分组&#xff0c;aggs 按照文档字段值或日期进行分组&#xff0c;能参与分词的字段不能做聚合&#xff0c;如text类型的字段 例如&#xff1a;根据城市名称做聚合&#xff0c;也就是城市名称对数据进行分组统计。可以加qu…

OceanBase 分布式数据库【信创/国产化】- OceanBase 平台产品 - 迁移评估工具 OMA

本心、输入输出、结果 文章目录 OceanBase 分布式数据库【信创/国产化】- OceanBase 平台产品 - 迁移评估工具 OMA前言OceanBase 数据更新架构OceanBase 平台产品 - 迁移评估工具 OMA兼容性评估性能评估导出 OceanBase 数据库对象和 SQL 语句OceanBase 分布式数据库【信创/国产…

screen命令

首先明确screen和bash终端有区别&#xff0c;如果不小心按了ctrlad会停止向屏幕输出&#xff0c;此时需要ctrlaq才能输出 一.新建屏幕 四种方法 其中一种是为该页面新创建一个进程 screen -dmS <页面名> 这种方法是为该页面新创建一个进程&#xff0c; 类似于开启另一个…