設計模式的應用 工廠方法實現3層模型解耦

2022-05-05 19:15:08 字數 1388 閱讀 2955

在web應用中常見的3層架構:控制層(controller)、業務邏輯(service)、資料持久層(dao),控制層呼叫業務邏輯層,業務邏輯層呼叫資料層。

這樣:)解耦,變成這樣:

首先新建dao工廠類dao.factory.daofactory, 用於建立dao物件:

/**

* dao工廠

* * 注意:工廠類會在類載入的時候為每種dao只會建立乙個dao物件,所以dao實現類中

* 不能通過物件包含資料庫連線,應該通過threadloacl實現每執行緒乙個連線

* @author

* */

public class daofactory catch(exception e)

} private static void init()

@suppresswarnings("unchecked")

public statict getdao(classclazz)

}

然後在業務邏輯層實現類中,注入dao物件,如下:

/**

* 使用者服務類

*/public class userserviceimpl implements userservice

遵循開閉原則,新建dao實現類,只需要工修改廠類即可。

注:可以給dao實現類新增自定義註解的方式,然後dao工廠類通過反射,掃瞄出有指定註解的類,進行注入。

注意多執行緒問題:

dao層和service層均為「實際單例」快取到map中,service中持有dao成員變數,servlet控制層持有service成員變數,由於dao的使用的資料庫連線來自於threadlocal變數,所以是執行緒安全的類,service只持有執行緒安全的類物件,所以也是執行緒安全的,同理上推。

在過濾器中關閉的sqlsession:

/**

* 系統服務過濾器

* 過濾字元編碼

* @author

* */

public class oesservicefilter implements filter

@override

public void dofilter(servletrequest req, servletresponse resp,

filterchain chain) throws ioexception, servletexception finally

} @override

public void init(filterconfig config) throws servletexception

}

設計模式 3 工廠方法模式

1.意圖 定義乙個用於建立物件的的介面,讓子類決定例項化哪乙個類.2.適用性 當乙個類不知道它必須所建立的物件的類的時候。當乙個類希望由它的子類來指定它所建立的物件的時候。3.抽象工廠和工廠方法的區別 抽象工廠 模式依賴於 工廠方法 模式的。因此,抽象工廠強調的是前面的動詞 抽象 也就是說,你將工廠...

設計模式 3 工廠方法模式

定義 定義乙個用於建立物件的介面,讓子類決定例項化哪乙個類。工廠方法使得乙個類的例項化延遲到了其子類。抽象工廠介面,用於建立計算物件 public inte ce ifactory 抽象計算介面,表示用於實現的業務 public inte ce calculate 具體工廠類,實現抽象工廠介面,返回...

設計模式(3)工廠方法模式

簡單工廠設計模式的思路,決定了每次新增一種具體的產品時,就需要更改工廠內部的產品構成。因為開閉原則,決定了對外開放介面,對內封閉的思路,工廠方法設計模式,不在使用工廠類統一建立所有的具體產品,不同工廠針對不同的產品,新增產品時,需要同時新增對應的工廠。工廠方法模式 定義乙個用於建立物件的介面,但是讓...