日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

java 耦合度_Java第三十八天,Spring框架系列,使用工厂模式降低程序耦合度

發布時間:2024/7/23 java 65 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java 耦合度_Java第三十八天,Spring框架系列,使用工厂模式降低程序耦合度 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、什么是耦合

程序之間的依賴關系:

①類之間的依賴

②方法之間的依賴

注意:

不可能完全的消除依賴關系,而只能是降低程序之間的依賴關系

二、解耦

降低程序之間的依賴關系:

1.解決類之間的依賴關系:

①通過讀取配置文件來獲取要創建對象的全限定類名

②使用反射來創建類的對象,盡量避免new關鍵字的使用

三、問題引出

1.新建Maven項目

2.修改配置文件,添加如下代碼,讓程序打包成Jar包的形勢

jar

3.開始編寫實驗代碼,整體架構如下:

3.持久層接口

package com.huhai.Dao;

/**

*持久層接口

*/

public interface IAccountDao {

public abstract void save();

}

4.持久層接口實現類

package com.huhai.Dao.Impl;

import com.huhai.Dao.IAccountDao;

/**

* 持久層實現類

*/

public class AccountDaoImpl implements IAccountDao {

public void save() {

System.out.println("數據保存成功");

}

}

5.業務層接口

package com.huhai.Service;

/**

*業務層接口

*/

public interface ISaveAccountService {

public abstract void save();

}

6.業務層接口實現類

package com.huhai.Service.Impl;

import com.huhai.Dao.Impl.AccountDaoImpl;

import com.huhai.Service.ISaveAccountService;

/**

* 業務層實現類

*/

public class AccountServiceImpl implements ISaveAccountService {

private AccountDaoImpl accountDao = new AccountDaoImpl();

public void save() {

accountDao.save();

}

}

7.表現層

package com.huhai;

import com.huhai.Service.Impl.AccountServiceImpl;

public class Realize {

private static AccountServiceImpl accountService;

public static void main(String[] args) {

accountService = new AccountServiceImpl();

accountService.save();

}

}

可以看出,它們之間的依賴關系非常嚴重,因此需要解耦

四、使用工廠模式降低程序耦合度

1.項目架構

2.工廠類:

package com.huhai.Factory;

import java.io.IOException;

import java.io.InputStream;

import java.util.Properties;

/**

* 一個創建Bean對象的工廠

* 它就是創建Server和Dao對象的

*/

public class BeanFactory {

/**

* 定義Properties對象

*/

private static Properties properties;

/**

* 使用靜態代碼段為properties賦值

*/

static {

/**

* 實例化對象

*/

properties = new Properties();

/**

* 獲取properties流對象

* 最好不要直接new,因為傳路徑的時候,路徑是一個容易出錯的地方

* 因為配置文件在resources根目錄下,所以可以直接填寫文件名字bean.properties作為參數

* 使用類加載器來獲得文件的路徑

*/

InputStream in = BeanFactory.class.getClassLoader().getResourceAsStream("bean.properties");

try {

properties.load(in);

} catch (IOException e) {

/**

* 配置文件如果出錯,則沒有必要繼續運行

* 拋出錯誤,終止整個程序

*/

throw new ExceptionInInitializerError("初始化異常");

}

}

/**

* 使用工廠模式創建對象

* 因為返回的對象不一定是一個類,所以返回值類型為Object或者泛型

* 根據bean的名稱獲取bean對象

*/

public static Object getBean(String beanName){

/**

* 初始化返回對象

*/

Object bean = null;

/**

* 根據傳入的beanName參數獲取properties中的對應類的全限定類名

*/

String beanPath = properties.getProperty(beanName);

try {

bean = Class.forName(beanPath).newInstance();

} catch (Exception e) {

e.printStackTrace();

}

return bean;

}

}

工廠類升級版——工廠類的單例模式

package com.huhai.Factory;

import java.io.InputStream;

import java.util.Enumeration;

import java.util.HashMap;

import java.util.Map;

import java.util.Properties;

/**

* 一個創建Bean對象的工廠

* 它就是創建Server和Dao對象的

*/

public class BeanFactory {

/**

* 定義Properties對象

*/

private static Properties properties;

/**

* 定義一個Map,使之能夠存放已經實例化的對象

* 該Map即為容器

* 該容器的建造是為了完成工廠的類的單例模式

*/

private static Map beans;

/**

* 使用靜態代碼段為properties賦值

*/

static {

try {

/**

* 實例化對象

*/

properties = new Properties();

/**

* 獲取properties流對象

* 最好不要直接new,因為傳路徑的時候,路徑是一個容易出錯的地方

* 因為配置文件在resources根目錄下,所以可以直接填寫文件名字bean.properties作為參數

* 使用類加載器來獲得文件的路徑

*/

InputStream in = BeanFactory.class.getClassLoader().getResourceAsStream("bean.properties");

properties.load(in);

/**

* 配置文件如果出錯,則沒有必要繼續運行

* 拋出錯誤,終止整個程序

*/

/**

*

*/

beans = new HashMap();

Enumeration keys = properties.keys();

/**

* 遍歷所有的keys

*/

while(keys.hasMoreElements()){

String key = keys.nextElement().toString();

//根據配置文件得到指定類的全限定類名

String property = properties.getProperty(key);

//使用反射實例化對象

Object obj = Class.forName(property).newInstance();

//將對象放進倉庫

beans.put(key, obj);

}

}catch (Exception e){

throw new ExceptionInInitializerError("初始化properties失敗!");

}

}

/**

* 使用工廠模式創建對象

* 因為返回的對象不一定是一個類,所以返回值類型為Object或者泛型

* 根據bean的名稱獲取bean對象

*/

public static Object getBean(String beanName){

//根據bean的名稱獲取bean單例對象

return beans.get(beanName);

}

}

3.持久層接口

package com.huhai.Dao;

/**

*持久層接口

*/

public interface IAccountDao {

public abstract void save();

}

4.持久層接口實現類

package com.huhai.Dao.Impl;

import com.huhai.Dao.IAccountDao;

/**

* 持久層實現類

*/

public class AccountDaoImpl implements IAccountDao {

public void save() {

System.out.println("數據保存成功");

}

}

5.業務層接口

package com.huhai.Service;

/**

*業務層接口

*/

public interface IAccountService {

public abstract void save();

}

6.業務層接口實現類

package com.huhai.Service.Impl;

import com.huhai.Dao.IAccountDao;

import com.huhai.Factory.BeanFactory;

import com.huhai.Service.IAccountService;

/**

* 業務層實現類

*/

public class AccountServiceImpl implements IAccountService {

/**

* 使用工廠模式創建對象,降低程序耦合度

*/

private IAccountDao accountDao = (IAccountDao)BeanFactory.getBean("accountDaoImpl");

public void save() {

accountDao.save();

}

}

7.表現層

package com.huhai;

import com.huhai.Factory.BeanFactory;

import com.huhai.Service.IAccountService;

public class Realize {

public static void main(String[] args) {

/**

* 為了解耦,使用工廠模式創建對象

*/

IAccountService accountService = (IAccountService) BeanFactory.getBean("accountServiceImpl");

accountService.save();

System.out.println(accountService);

}

}

8.bean.properties配置文件

#鍵(key)用小寫

accountServiceImpl=com.huhai.Service.Impl.AccountServiceImpl

accountDaoImpl=com.huhai.Dao.Impl.AccountDaoImpl

總結

以上是生活随笔為你收集整理的java 耦合度_Java第三十八天,Spring框架系列,使用工厂模式降低程序耦合度的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。