简单工厂+配置文件解除耦合

可以通过工厂模式+配置文件的方式解除工厂对象和产品对象的耦合。

在工厂类中加载配置文件中的全类名,并创建对象进行存储,客户端如果需要对象,直接进行获取即可。



第一步:定义配置文件

为了演示方便,我们使用properties文件作为配置文件,名称为bean.properties

american=com.itheima.pattern.factory.config_factory.AmericanCoffee
latte=com.itheima.pattern.factory.config_factory.LatteCoffee

Coffee.java

package com.itheima.pattern.factory.config_factory;/*** @version v1.0* @ClassName: Coffee* @Description: 咖啡类* @Author: dym*/
public abstract class Coffee {public abstract String getName();//加糖public void addsugar() {System.out.println("加糖");}//加奶public void addMilk() {System.out.println("加奶");}
}

LatteCoffee.java

package com.itheima.pattern.factory.config_factory;/*** @version v1.0* @ClassName: LatteCoffee* @Description: 拿铁咖啡* @Author: dym*/
public class LatteCoffee extends Coffee {public String getName() {return "拿铁咖啡";}
}

AmericanCoffee.java

package com.itheima.pattern.factory.config_factory;/*** @version v1.0* @ClassName: AmericanCoffee* @Description: 美式咖啡* @Author: dym*/
public class AmericanCoffee extends Coffee {public String getName() {return "美式咖啡";}
}

CoffeeFactory.java

package com.itheima.pattern.factory.config_factory;import java.io.IOException;
import java.io.InputStream;
import java.util.HashMap;
import java.util.Properties;
import java.util.Set;/*** @version v1.0* @ClassName: CoffeeFactory* @Description: TODO(一句话描述该类的功能)* @Author: dym*/
public class CoffeeFactory {//加载配置文件,获取配置文件中配置的全类名,并创建该类的对象进行存储//1,定义容器对象存储咖啡对象private static HashMap<String,Coffee> map = new HashMap<String, Coffee>();//2,加载配置文件, 只需要加载一次static {//2.1 创建Properties对象Properties p = new Properties();//2.2 调用p对象中的load方法进行配置文件的加载InputStream is = CoffeeFactory.class.getClassLoader().getResourceAsStream("bean.properties");try {p.load(is);//从p集合中获取全类名并创建对象Set<Object> keys = p.keySet();for (Object key : keys) {String className = p.getProperty((String) key);//通过反射技术创建对象Class clazz = Class.forName(className);Coffee coffee = (Coffee) clazz.newInstance();//将名称和对象存储到容器中map.put((String)key,coffee);}} catch (Exception e) {e.printStackTrace();}}//根据名称获取对象public static Coffee createCoffee(String name) {return map.get(name);}
}

Client.java

package com.itheima.pattern.factory.config_factory;/*** @version v1.0* @ClassName: Client* @Description: TODO(一句话描述该类的功能)* @Author: dym*/
public class Client {public static void main(String[] args) {Coffee coffee = CoffeeFactory.createCoffee("american");System.out.println(coffee.getName());System.out.println("=============");Coffee latte = CoffeeFactory.createCoffee("latte");System.out.println(latte.getName());}
}



静态成员变量用来存储创建的对象(键存储的是名称,值存储的是对应的对象),

而读取配置文件以及创建对象写在静态代码块中,目的就是只需要执行一次。

模式扩展 ——简单工厂+配置文件解除耦合 *****相关推荐

  1. Java工厂模式(简单工厂、工厂方法、抽象工厂)详解

    工厂模式是一种非常常用的创建型设计模式,其提供了创建对象的最佳方式.在创建对象时,不会对客户端暴露对象的创建逻辑,而是通过使用共同的接口来创建对象. 1.工厂模式的理解 1.1.工厂模式的分类 工厂模 ...

  2. 设计模式——工厂模式(简单工厂/工厂/抽象)

    1. 简单工厂模式 1.1 定义 简单工厂模式(Simple Factory Pattern):又称为静态工厂方法(Static Factory Method)模式,它属于类创建型模式. 在简单工厂模 ...

  3. 工厂模式(简单工厂模式)快速理解

    工厂模式 一个工厂类根据传入的参数,动态的决定应该创建哪一个产品类(产品类都继承或实现于一个父类或接口),自动创建并返回实例 使用场景 工厂类负责创建的对象较少,调用者只知道传入参数,对于如何创建对象 ...

  4. 2.5万字详解23种设计模式—创建型模式(简单工厂、工厂方法、抽象工厂、单例-多线程安全详解、建造者、原型)的详细解读、UML类图

    本文简述了各大设计模式,并通过UML和代码详细说明.本文大约共 2.5W 字,建议收藏.下方是本文的目录: 一.设计模式的认识 二.设计模式的分类 根据其目的 根据范围 三.设计模式的优点 四.设计模 ...

  5. 设计模式——工厂模式(简单工厂模式、工厂方法模式、抽象工厂模式)

    声明: 本博客参考C语言中文网:C语言中文网连接 主要记录学习以下内容: 一.简单工厂模式 二.工厂方法模式 三.抽象工厂模式 每个大要点都主要包括以下两部分内容: (1)基本概念和模型结构(包括一些 ...

  6. Java设计模式之(工厂模式)--简单工厂模式--工厂方法模式--抽象工厂模式

    工厂模式: 工厂模式可以分为三类: 1)简单工厂模式(Simple Factory) 2)工厂方法模式(Factory Method) 3)抽象工厂模式(Abstract Factory) 简单工厂模 ...

  7. 工厂模式(简单工厂、工厂方法、抽象工厂)

    简单工厂模式 从设计模式的类型上来说,简单工厂模式是属于创建型模式,又叫做静态工厂方法(StaticFactory Method)模式,但不属于23种GOF设计模式之一.简单工厂模式是由一个工厂对象决 ...

  8. 设计模式---3(工厂方法模式的概念,工厂方法模式的实现,工厂方法模式和简单工厂模式比较)

    工厂方法模式 概念 工厂方法模式同样属于类的创建型模式又被称为多态工厂模式 . 工厂方法模式的意义 定义一个创建产品对象的工厂接口,将实际创建工作推迟到子类当中. 核心工厂类不再负责产品的创建,这样核 ...

  9. 设计模式系列——三个工厂模式(简单工厂模式,工厂方法模式,抽象工厂模式)...

    转自:http://www.cnblogs.com/stonehat/archive/2012/04/16/2451891.html 设计模式系列--三个工厂模式(简单工厂模式,工厂方法模式,抽象工厂 ...

最新文章

  1. Fortinet“安立方”架构获得NSS Labs BDS 组测试多攻击维度100%检出率佳绩
  2. 【Android 应用开发】Android UI 设计之 TextView EditText 组件属性方法最详细解析
  3. 牛客网(剑指offer) 第七题 斐波那契数列
  4. TextView控件
  5. 商桥物流完成达晨创投领投2.5亿元A+轮融资,创建立体化零担物流网络
  6. Oracle数据库只读事务和无事务的区别
  7. 李迟2021年11月知识总结
  8. docker-compose的一些理解
  9. Exchange 2016通过IIS限制不允许访问OWA的域名或网段
  10. java中的构造函数
  11. 分布式日志收集系统实践(视频教程)
  12. MAX30102学习笔记(下)
  13. 参数问题:nested exception is java.lang.NumberFormatException: For input string: “null“,已解决。
  14. 公钥,私钥 和数字证书
  15. 黑客电影预言或成真,英国核潜艇安全问题堪忧
  16. 链路层链路发现协议(LLDP)讲解
  17. 看了下大厂程序员的工资表,我酸了.....
  18. opengles绘制天空盒
  19. dhu 1.2 链表的中间结点
  20. 小程序用户头像昵称获取规则调整公告及微信小程序基础库的问题

热门文章

  1. springboot项目打包运行
  2. luogu P2679——子串
  3. 20179214 2017-2018 2《网络攻防实践》第七周学习总结
  4. 2014年湖北省TI杯大学生电子设计竞赛论文格式
  5. before与after的一些应用总结
  6. 常见java考试题与面试题一
  7. 敦泰FT6X06单层自容调屏
  8. 蓝牙PSKEY的调整
  9. 杀毒软件引起的WinCE编译出错问题
  10. java cookie共享_JavaWeb的session及其共享技术