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

歡迎訪問 生活随笔!

生活随笔

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

asp.net

设计模式之 抽象工厂 封装业务逻辑层和Dao层

發布時間:2025/6/15 asp.net 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 设计模式之 抽象工厂 封装业务逻辑层和Dao层 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一般情況下軟件應該盡量遵循以下的設計原則:?開閉原則(OCP)

  • ? 對擴展開放,對修改關閉

里氏替換原則(LSP)

  • ? 任何類出現的地方,子類一定可以出現(is-a)

依賴倒轉原則(DIP)

  • ? 盡量依賴抽象,不要依賴具體

接口隔離原則

  • ? 接口盡量小,不要提供大的接口,使通信盡可能窄

合成復用原則

  • ? 盡量采用合成和聚合的方式達到利用,而不要使用繼承的方式達到利用

迪米特法則

  • ? 一個軟件實體盡可能少的與其它實體發生作用

抽象工廠:實現多個產品的創建?優點:對產品的增加支持OCP原則?缺點:對產品系列的增加不支持OCP原則 抽象工廠的示意圖如下:?下面是一個抽象工廠生產Manager和DAO的示例:

在classpath下創建一個xml文件bean_config.xml,當我們每建立一個Manager和DAO時就在這里配置類信息 <?xml version="1.0"encoding="UTF-8"?> <bean> <manager-class> <manager id="gd.hz.manager.ItemsManager"class="gd.hz.manager.ItemsManager"></manager> </manager-class> <dao-class> <dao id="gd.hz.dao.ItemsDAO"class="gd.hz.dao.ItemsDAO"></dao> </dao-class> </bean> ? 創建工廠BeanFactory(接口省略),使用dom4j讀取配置文件: package gd.hz.util;import java.io.InputStream; import java.util.HashMap; import java.util.Map;import org.dom4j.Document; import org.dom4j.DocumentException; import org.dom4j.Element; import org.dom4j.io.SAXReader;public class BeanFactory {// 使用單例private static BeanFactory beanFactory = new BeanFactory();private final String beanConfigFile ="bean_config.xml";// 存放Manager實例集合private Map<String, Object> managerMap = new HashMap<String, Object>();// 存放DAO實例集合private Map<String, Object> daoMap = new HashMap<String, Object>();private Document document = null;private BeanFactory() {// 初始化SAXReaderSAXReader reader = new SAXReader();InputStream in = Thread.currentThread().getContextClassLoader().getResourceAsStream(beanConfigFile);try {document = reader.read(in);} catch (DocumentException e) {e.printStackTrace();}}public static BeanFactory getInstance() {return beanFactory;}// 傳入配置文件中id屬性的名稱,配置class屬性,用反射產生對象.public synchronized Object getManagerObj(String managerName) {// 若存在實例則反回.if (managerMap.containsKey(managerName)) {return managerMap.get(managerName);}// 讀取配置文件Element el = (Element) document.selectSingleNode("/bean/manager-class/manager[@id='"+ managerName +"']");String className = el.attributeValue("class");Object manager = null;try {// 反射半生實例manager = Class.forName(className).newInstance();} catch (Exception e) {e.printStackTrace();throw new RuntimeException("類加載失敗!!");}// 放入容器中.managerMap.put(managerName, manager);return manager;}public synchronized Object getDaoObj(String daoName) {if (daoMap.containsKey(daoName)) {return daoMap.get(daoName);}Element el = (Element) document.selectSingleNode("/bean/dao-class/dao[@id='"+ daoName +"']");String className = el.attributeValue("class");Object dao = null;try {dao = Class.forName(className).newInstance();} catch (Exception e) {e.printStackTrace();throw new RuntimeException("類加載失敗!!");}managerMap.put(daoName, dao);return dao;} } ?

測試:

public static void main(String[] args) { //從工廠獲取BeanItemsManager itemsManager = (ItemsManager)BeanFactory.getInstance().getManagerObj(ItemsManager.class.getName()); }

總結

以上是生活随笔為你收集整理的设计模式之 抽象工厂 封装业务逻辑层和Dao层的全部內容,希望文章能夠幫你解決所遇到的問題。

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