工厂模式解耦---控制反转
生活随笔
收集整理的這篇文章主要介紹了
工厂模式解耦---控制反转
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
控制反轉
是面向對象編程中的一種設計原則,可以用來減低計算機代碼之間的耦合度。其中最常見的方式叫做依賴注入(Dependency Injection,簡稱DI),還有一種方式叫“依賴查找”(Dependency Lookup)。通過控制反轉,對象在被創建的時候,由一個調控系統內所有對象的外界實體將其所依賴的對象的引用傳遞給它。也可以說,依賴被注入到對象中。
----來自百度
工廠
使用工廠依賴來對對象注入依賴。
沒有使用工廠模式前
使用了工廠模式之后
Beans.properties配置文件
工廠將解析properties配置文件獲取到對應的key和value
在工廠類中使用java反射技術來在程序運行期間注入依賴創建對象。
beansFactory 工廠類
package com.factory;import java.io.InputStream; import java.util.Enumeration; import java.util.HashMap; import java.util.Map; import java.util.Properties;public class Beasfactory {private static Properties properties = null;private static Map<String, Object> beans = null;static {try {properties = new Properties();//使用類加載器獲取Properties的流對象InputStream in = Beasfactory.class.getClassLoader().getResourceAsStream("Beans.properties");properties.load(in);beans = new HashMap<String, Object>();final Enumeration keys = properties.keys();while (keys.hasMoreElements()) {String key = keys.nextElement().toString();String beanpath = properties.getProperty(key);Object value = Class.forName(beanpath).newInstance();beans.put(key, value);}} catch (Exception e) {//ExceptionInInitializerError 它繼承的是一個Error 會直接終止程序throw new ExceptionInInitializerError("初始化失敗");}}/*** 獲取單例對象** @param beanName* @return*/public static Object getBean(String beanName) {return beans.get(beanName);} }在工廠類中我們使用Map來存儲對象,這樣我們在需要使用這些對象時直接獲取對象,不需要重新創建對象,降低了JVM的負擔,這就是單例對象,其他類在調用該對象時都是獲取它的引用,本質上都是同一個對象(內存地址相同)。
實例
package com.service.Impl;import com.dao.ISel; import com.dao.Impl.ISelimpl; import com.factory.Beasfactory; import com.service.IUserSel;public class IUserSelimpl implements IUserSel {public void userSelAll() {ISel sel= (ISelimpl)Beasfactory.getBean("ISelimpl");sel.selAll();} }工廠模式降低了程序的耦合性,提高了程序的獨立性,邏輯性也更強了,調用關系也明朗了。
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的工厂模式解耦---控制反转的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mysql集群搭建(使用docker 一
- 下一篇: pandas无法打开.xlsx文件,xl