当前位置: 首页 > news >正文

工厂模式的扩展

工厂模式的扩展

1.添加配置文件,
american latte

配置高文件

2.。修改工厂方法

public abstract class Coffee {
    //咖啡名
    public abstract String getName();
    //加糖
    public void addSuger(){
        System.out.println("Suger");
    }

    //加牛奶
    public void addMilk(){
        System.out.println("Milk");
    }
}
public class LatteCoffee extends Coffee {
    @Override
    public String getName() {
        return "拿铁咖啡";
    }
}

public class AmericanCoffee extends Coffee {
    @Override
    public String getName() {
        return "美式咖啡";
    }
}



工厂方法

public class CoffeeFactory {
    //加载配置文件,获取配置文件中配置的全类名,并创建该类的对象进行存储
    //定义容器对象存储咖啡对象
    private static Map<String,Coffee> map=new HashMap<>();
    static {
        //创建Properties对象
        Properties p=new Properties();
        //调用p对象中的load方法进行配置文件的加载
        InputStream is = CoffeeFactory.class.getClassLoader().getResourceAsStream("beans.properties");
        try{
            p.load(is);
            //遍历Propertise集合对象
            Set<Object> keys = p.keySet();
            for(Object key : keys){
                //根据键获取值
                String className=p.getProperty((String) key);
                //获取字节码对象
                Class clazz = Class.forName(className);
                //通过反射技术创建对象
                Coffee obj = (Coffee) clazz.newInstance();
                map.put((String)key,obj);
            }
        }catch (Exception e){
            e.printStackTrace();
        }
    }
    //根据名称获取对象
    public static Coffee createCoffee(String name){
        return map.get(name);
    }
}

实例

public class Client {
    public static void main(String[] args) {
        CoffeeFactory.createCoffee("american");
        System.out.println(coffee.getName());
        System.out.println("=========");

        Coffee latte = CofffeeFctory.crateCoffee("latte");
        System.out.println(latte.getName());
    }
}

http://www.dtcms.com/a/72680.html

相关文章:

  • 2.7 滑动窗口专题:串联所有单词的子串
  • 2024浙江大学计算机考研上机真题
  • 日志、类加载器、XML(配置文件)
  • 如何免费无限制使用 Cursor 软件:完整指南
  • 生活中的可靠性小案例12:类肤材质老化发粘问题
  • git操作大全
  • EDAS:投稿经验-word版本-问题解决
  • 微服务架构: SpringCloud实战案例
  • 计算机网络开发--阻塞与非阻塞、同步与异步、http协议
  • 使用 PaddleNLP 在 CPU(支持 AVX 指令)下跑通 llama2-7b或DeepSeek-r1:1.5b 模型(完成度80%)
  • VUE2与VUE3的底层监听工具对比:Object.defineProperty() (Vue 2) 与 Proxy (Vue 3)
  • 树莓派急速安装ubuntu;映射磁盘与储存磁盘文件;ubuntu映射整个工程;保存系统工作状态
  • DOM4J解析XML, 修改xml的值
  • Springboot+mybait查询功能撰写
  • prometheus自定义监控(pushgateway和blackbox)和远端存储VictoriaMetrics
  • 深度解析React Native底层核心架构与演进之路
  • 零基础keil:设置注释快捷键
  • 【RNN神经网络】序列模型与RNN神经网络
  • 2.创建QT项目
  • 算法——层序遍历和中序遍历构造二叉树
  • 前端小食堂 | Day15 - VueUse 魔法道具库
  • 【NLP 40、残差神经网络】
  • Windows下安装MongoDB 8
  • 【数据分析】读取文档(读取Excel)
  • Flux 文生图技术解析与部署实践
  • Python 魔法方法介绍
  • 网络安全常识科普(百问百答)
  • 每日Attention学习26——Dynamic Weighted Feature Fusion
  • 双指针算法专题之——有效三角形的个数
  • 《Python深度学习》第二讲:深度学习的数学基础