模式扩展 ——简单工厂+配置文件解除耦合 *****
生活随笔
收集整理的這篇文章主要介紹了
模式扩展 ——简单工厂+配置文件解除耦合 *****
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
簡單工廠+配置文件解除耦合
可以通過工廠模式+配置文件的方式解除工廠對象和產品對象的耦合。
在工廠類中加載配置文件中的全類名,并創建對象進行存儲,客戶端如果需要對象,直接進行獲取即可。
第一步:定義配置文件
為了演示方便,我們使用properties文件作為配置文件,名稱為bean.properties
american=com.itheima.pattern.factory.config_factory.AmericanCoffee latte=com.itheima.pattern.factory.config_factory.LatteCoffeeCoffee.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());} }靜態成員變量用來存儲創建的對象(鍵存儲的是名稱,值存儲的是對應的對象),
而讀取配置文件以及創建對象寫在靜態代碼塊中,目的就是只需要執行一次。
總結
以上是生活随笔為你收集整理的模式扩展 ——简单工厂+配置文件解除耦合 *****的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 静态工厂模式
- 下一篇: JDK源码解析-Collection.i