「全网最细 + 实战源码案例」设计模式——模式扩展(配置工厂)

ops/2025/1/25 4:24:43/

核心思想

  • 通过配置文件反射机制动态决定具体工厂的选择,减少客户端对具体工厂和具体产品的硬编码依赖,使系统更灵活、更易扩展。
  • 改进点:
    • 配置文件解耦:使用配置文件动态加载具体工厂类。
    • 反射机制扩展:通过反射机制创建具体工厂对象,避免客户端直接依赖具体工厂类。
    • 提升扩展性:新增产品族时无需修改客户端代码。

代码实现

1. 定义配置文件

americano=com.colin.patterns.creational_patterns.config_factory.Americano
latte=com.colin.patterns.creational_patterns.config_factory.Latte

2. 改进工厂类

package com.colin.patterns.creational_patterns.config_factory;import java.util.HashMap;
import java.util.Properties;public class CoffeeFactory {// 1.定义容器Map,存储所有的咖啡对象private static HashMap<String, Coffee> map = new HashMap<>();// 2.加载配置文件static {// 2.1.创建Properties对象Properties properties = new Properties();// 2.2.加载配置文件try {properties.load(CoffeeFactory.class.getClassLoader().getResourceAsStream("bean.properties"));// 2.3.获取配置文件中所有的keyfor (Object key : properties.keySet()) {// 2.4.获取valueString className = properties.getProperty((String) key);// 2.5.通过反射创建对象Class clazz = Class.forName(className);Coffee coffee = (Coffee) clazz.newInstance();// 2.6.把key和value存入map中map.put((String) key,coffee);}} catch (Exception e) {e.printStackTrace();}}// 根据name获取Coffee对象public static Coffee createCoffee(String name) {return map.get(name);}
}
// 客户端
public class Client {public static void main(String[] args) {Coffee americano = CoffeeFactory.createCoffee("americano");System.out.println(americano.getName());System.out.println("-----------------------------------------");Coffee latte = CoffeeFactory.createCoffee("latte");System.out.println(latte.getName());}
}


http://www.ppmy.cn/ops/152926.html

相关文章

PHP语言的语法糖

PHP语言的语法糖 引言 在现代编程语言中&#xff0c;语法糖&#xff08;Syntactic Sugar&#xff09;是指一些改善用户体验的语言特性&#xff0c;使得某些语法更加简洁、易用。PHP作为一种广泛使用的服务器端脚本语言&#xff0c;自然也不例外。它大量引入了语法糖&#xff…

什么是 Flask 的蓝图(Blueprint)

Flask 的蓝图&#xff08;Blueprint&#xff09; Flask 的蓝图&#xff08;Blueprint&#xff09;是一种模块化工具&#xff0c;允许开发者将应用程序的路由、视图和其他逻辑分成独立的模块。这对于组织大型 Flask 项目非常有用&#xff0c;使代码更清晰、可维护&#xff0c;并…

从理论到实践:Django 业务日志配置与优化指南

在现代 Web 开发中,日志记录是确保系统可维护性和可观测性的重要手段。通过合理的日志配置,我们可以快速定位问题、分析系统性能,并进行安全审计。本文将围绕 Django 框架,详细介绍如何配置和优化业务日志,确保开发环境和生产环境都能高效地记录和管理日志。 © ivwdc…

Coze,Dify,FastGPT,对比

在当今 AI 技术迅速发展的背景下&#xff0c;AI Agent 智能体成为了关键领域&#xff0c;Coze、Dify 和 FastGPT 作为其中的佼佼者&#xff0c;各有千秋。 平台介绍 - FastGPT&#xff1a;由环界云计算公司发起&#xff0c;是基于大语言模型&#xff08;LLM&#xff09;的开源…

GPU算力平台|在GPU算力平台部署ChatGLM4大模型的应用教程

文章目录 一、GPU算力服务平台GPU算力平台简单概述 二、GPU算力平台有哪些优势并行计算能力卓越高速数据传输性能灵活的资源管理机制经济高效的按需计费模式多元化的应用场景说明 三、平台账号注册流程ChatGLM4大模型的部署步骤 一、GPU算力服务平台 GPU算力平台简单概述 云端…

Web安全:缓存欺骗攻击;基于缓存、CDN的新型Web漏洞

基于缓存、CDN的新型Web漏洞 漏洞原理利用方式解决方法 Web缓存欺骗漏洞&#xff08;Web Cache Deception&#xff09;是一种利用不安全的缓存机制来泄露用户敏感信息的攻击方式。攻击者通过操控请求URL诱导缓存系统将敏感信息缓存并对其他用户公开&#xff0c;可能导致用户数据…

Windows7搭建Hadoop-2.7.3源码阅读环境问题解决列表

个人博客地址:Window7搭建Hadoop-2.7.3源码阅读环境问题解决列表 | 一张假钞的真实世界 环境说明 Windows 7java version “1.7.0_80”Apache Maven 3.2.3ProtocolBuffer 2.5.0cmake version 3.7.2 win64 x64Windows SDK 7.1构建过程参照源代码目录下BUILDING.txt说明文件中的…

算法刷题笔记——图论篇

这里写目录标题 理论基础图的基本概念图的种类度 连通性连通图强连通图连通分量强连通分量 图的构造邻接矩阵邻接表 图的遍历方式 深度优先搜索理论基础dfs 与 bfs 区别dfs 搜索过程深搜三部曲所有可达路径广度优先搜索理论基础广搜的使用场景广搜的过程 岛屿数量孤岛的总面积沉…