首页 > 编程语言 >「全网最细 + 实战源码案例」设计模式——模式扩展(配置工厂)

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

时间:2025-01-23 18:31:55浏览次数:1  
标签:Coffee 最细 String 配置文件 patterns 源码 key 设计模式 properties

核心思想

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

代码实现

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.获取配置文件中所有的key
            for (Object key : properties.keySet()) {
                // 2.4.获取value
                String 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());
    }
}

标签:Coffee,最细,String,配置文件,patterns,源码,key,设计模式,properties
From: https://www.cnblogs.com/cikiss/p/18688474

相关文章

  • springboot运动场地的预约系统-计算机毕业设计源码48258
    目 录摘要1绪论1.1研究背景1.2 研究意义1.3论文结构与章节安排2系统分析2.1可行性分析2.2系统流程分析2.2.1用户登录流程2.2.2 数据删除流程2.3 系统功能分析2.3.1功能性分析2.3.2非功能性分析2.4 系统用例分析2.5本章小结3 系统......
  • springboot在线吉他配套服务系统-计算机毕业设计源码53451
    目录摘要1绪论1.1选题背景与意义1.2国内外研究现状1.3论文结构与章节安排2系统分析2.1可行性分析2.2系统流程分析2.2.1数据流程2.2.2业务流程2.3系统功能分析2.3.1功能性分析2.3.2非功能性分析2.4系统用例分析2.5本章小结3系统总体......
  • 基于Java的宠物医院管理系统 毕业设计源码14635
    目 录1绪论1.1选题背景1.2研究现状1.3论文结构与章节安排2 宠物医院管理系统系统分析2.1可行性分析2.1.1技术可行性分析2.1.2 操作可行性分析2.1.3 法律可行性分析2.2系统功能分析2.2.1功能性分析2.2.2非功能性分析2.3 系统用例分析......
  • springboot助农管理系统 毕业设计源码15080
                                 目录1绪论1.1研究背景及意义1.3系统开发的目标意义1.4论文结构与章节安排2.助农管理系统系统分析2.1可行性分析2.2系统功能分析2.3 系统用例分析2.4业务流程......
  • 【附源码】springboot 玩具销售系统设计与实现
    博主介绍:✌CSDN新星计划导师、Java领域优质创作者、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和学生毕业项目实战,高校老师/讲师/同行前辈交流✌技术范围:SpringBoot、Vue、SSM、HTML、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、小程序、安卓app、大数......
  • 【附源码】springboot某火锅店管理系统设计与实现
    博主介绍:✌CSDN新星计划导师、Java领域优质创作者、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和学生毕业项目实战,高校老师/讲师/同行前辈交流✌技术范围:SpringBoot、Vue、SSM、HTML、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、小程序、安卓app、大数......
  • 【附源码】springboot 玩具销售系统设计与实现
    博主介绍:✌CSDN新星计划导师、Java领域优质创作者、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和学生毕业项目实战,高校老师/讲师/同行前辈交流✌技术范围:SpringBoot、Vue、SSM、HTML、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、小程序、安卓app、大数......
  • 【附源码】springboot某火锅店管理系统设计与实现
    博主介绍:✌CSDN新星计划导师、Java领域优质创作者、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和学生毕业项目实战,高校老师/讲师/同行前辈交流✌技术范围:SpringBoot、Vue、SSM、HTML、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、小程序、安卓app、大数......
  • 【附源码】springboot 畅销图书推荐系统设计与实现
    博主介绍:✌CSDN新星计划导师、Java领域优质创作者、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和学生毕业项目实战,高校老师/讲师/同行前辈交流✌技术范围:SpringBoot、Vue、SSM、HTML、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、小程序、安卓app、大数......
  • JAVA实战开源项目:在线旅游网站(Vue+SpringBoot) 附源码
    本文项目编号T025,文末自助获取源码\color{red}{T025,文末自助获取源码}......