對抽象工廠 反射 配置檔案的例項理解

2021-07-07 07:20:01 字數 2768 閱讀 2233

第一遍學習設計模式時,總有飄飄然的感覺.《大話設計模式》這本書雖然讀起來挺有趣味,也感覺比其他講設計模式的書好理解一些。但是真要用在機房收費系統時還是費勁的。公尺老師講過:思想要上移,行動要下移。這兩點要緊密結合,缺一不可。總在思想層面上繞,比如設計模式中所舉的生活中的例子,用在**中卻不是那麼容易,所以必須要行動下移,認真實踐。而總在**中繞,不進行總結提煉概括,學習就很侷限,所以我們也要不斷總結,思想上移。第二遍學習抽象工廠是在機房收費系統中,我想講講使用它的過程。

一.為什麼要用抽象工廠

以備我們的軟體要在不同資料庫上執行。現在我們使用的是sql sever,而要使用access或者oracle等時就需要考慮了。抽象工廠可以使我們靈活地更換到其他資料庫上。如何能夠靈活結合uml圖進行理解。

圖中的紅色框是idal(介面)。我舉個生活中的例子接電的插口來理解。同乙個插口我們可以插電腦,電視,電冰箱等等。只要插頭與插口的規格一致就可以。對於這張包中可以看到整個邏輯從ui到idal就結束了,後面的d層和helper要看具體情況,實現介面的可以使sqldal,也可以使accessdal。

二.反射和配置檔案是起什麼作用的。

《大話設計模式》中講過抽象工廠的優點和缺點。缺點之一就是需求增加時,比如要增加一張表。就要至少更改三個類。ifactory,sqlfactory,accessfacotry...所以採用了簡單工廠來改進抽象工廠,而在簡單工廠中的例項化需要通過分支判斷語句來判斷。這裡就引入了反射,反射主要來解決分支判斷的問題,使得例項化更加地方便。具體如何靈活需要通過例項講解。

反射使用格式:assembly.load("程式集名稱").createinstance("命名空間.類名稱「)

剛開始感覺很暈,不明白程式集名稱應該是什麼?命名空間又是指得哪個?反射是用來解決分支判斷問題的,使得例項化更加方便。程式集一定是要具體例項化的地方。這裡就是指d層,預設情況,程式集名稱和命名空間是同樣的。這裡都是sqldal,當然如果是accessdal,程式集名稱就是指accessdal了。說它靈活是指可以使用配置檔案指定具體是sql還是access。而具體的類名稱就要看你實現的是什麼功能了。如果是登入,那麼就是userdal(類名稱)

三登入例項應用

我按一條線的順序給出**:

b層:[vb]view plain

copy

''' 

''' 驗證使用者是否存在

''' 

''' 使用者實體

''' datatable

''' 

public

function

existuser(

byval

enuser 

asentity.usersentity) 

asdatatable  

dimiu 

asidal.iuser  

dimdt 

asnew

datatable  

iu = factory.dataaccess.createuser()    '由於是shared定義的函式,這裡直接呼叫,不用例項化。

dt = iu.selectuser(enuser)  

return

dt  

endfunction

工廠:[vb]view plain

copy

private

shared

readonly

db as

string

"db"

)  private

shared

readonly

assemblyname = db + 

"dal"

''' 

''' 使用反射和配置檔案建立相應的介面

''' 

''' iuser介面

''' 

public

shared

function

createuser() 

asidal.iuser  

dimclassname 

asstring

= assemblyname + 

"."+ db + 

"userdal"

return

ctype

(assembly

.load(assemblyname).createinstance(classname), idal.iuser)   

'呼叫反射

endfunction

介面:[vb]view plain

copy

''' 

''' 登入時查詢使用者是否存在.

''' 

''' 引數為使用者實體

''' datatable ,將userpassword,level,作為表中的兩列返回

''' 

function

selectuser(

byval

enuser 

asentity.usersentity) 

asdatatable  

d層的命名空間是sqldal,類名稱為sqluserdal。

配置檔案:

[vb]view plain

copy

"db"

value=

"sql"

/>  

四.總結:多實踐,多總結。

登陸 抽象工廠 反射配置檔案

還記得照葫蘆畫瓢嗎?在敲機房收費系統的時候的確是照著三層加上自己的理解來敲的,整個過程下來就是完全照葫蘆畫瓢的。但是第一次成型,出現問題的時候,請教了別人。他將我的錯誤指出來,以及我自創的三層架構。看了看別人的,我的簡直不堪入目。別人長得是葫蘆,我這本來是葫蘆根,長出來的確是絲瓜,四不像。之後忍受各...

機房重構 抽象工廠 反射 配置檔案(上)

被抽象工廠在重構中的運用困擾好久了,現在終於理清了一些頭緒。下面我就分享一下這一階段我所遇到的一些問題以及解決方法。通俗的講,配置檔案就是程式執行時需要用到的一些設定以及引數,它和程式一起安裝到計算機上。通過配置檔案,開發人員可以按需要對其做修改,而不必改變程式 就可以達到某種目的。配置檔案是標準的...

工廠模式(簡單,配置檔案,反射,工廠方法,抽象)

簡單工廠模式的缺點,把矛盾集中在簡單工廠類中,使工廠類高耦合,而且進行修改和新增的時候也會比較麻煩。簡單工廠模式的優點,結構更加清晰,使 容易維護和分工明確,如下 namespace designmode public enum traffictype 下面是簡單工廠的意識圖 工程模式加上配置檔案的...