最近機房收費系統的重構完成了,儘管就用了兩個設計模式,但是卻還是感覺怪怪的,總感覺外觀有問題,知道昨天實驗了乙個晚上,才發現自己是**錯了,現在就把我認為正確的外觀介紹給大家。
什麼是外觀。
簡單的說就是一組藉口,用來連線客戶端與複雜功能實現的一組藉口,防止客戶端與子系統內部產生耦合,從而導致客戶程式隨著子系統的變化也要發生變化,我們就用了乙個外觀模式這個藉口來實現他。
為什麼要用呢?
大家在程式設計的時候有時候會遇到這麼乙個問題,比如最簡單的登陸來說吧,我們會先進行卡號的查詢,如果卡號通過了,在進行密碼的查詢,兩項都通過了,才能進入許可權,所以我們在客戶端的**中就會呼叫兩個方法,然後再註冊的時候,我們同樣需要判斷這兩項是否存在,這個方法又需要呼叫兩遍,2遍看上去不是很多,那如果三個方法呢,四個方法的組合呢,所以我們就會想到把這幾個方法封裝成乙個方法,所以外觀模式就應運而生了。
下面我們來看一看如果不用外觀是什麼樣子的。例如乙個登陸的demo,我們需要兩個方法,判斷使用者名稱和使用者密碼。
那麼再看看用了外觀是什麼樣子的。
**如下 方法
'驗證使用者是否存在
public function i***ist(byval user as entity.userinfo) as boolean
dim iuser as idal.iuser
dim factory as new factory.dataaccess
dim mylist as new list(of entity.userinfo)
'呼叫工廠的方法建立出乙個介面
iuser = factory.createuser()
'呼叫藉口的方法,返回值給list這個泛型集合
mylist = iuser.queryuserinfo(user)
if mylist.count = 0 then
msgbox("使用者名稱輸入錯誤")
return false
else
return true
end if
end function
'驗證密碼是否正確
public function confirmpwd(byval user as entity.userinfo) as boolean
dim iuser as idal.iuser
dim factory as new factory.dataaccess
'利用抽象工廠+反射呼叫乙個介面方法
iuser = factory.createuser()
dim mylist as new list(of entity.userinfo)
'根據登陸的使用者名稱來查詢密碼,返回給list
mylist = iuser.queryuserinfo(user)
'如果使用者名稱正確
if mylist.count = 1 then
'如果密碼正確
if mylist.first.pwd = user.pwd then
return true
' 錯誤的話
else
msgbox("密碼錯誤")
end if
end if
end function
外觀層
''' ''' 登陸的外觀
'''
''' 傳入的使用者名稱和密碼
''' boolean
'''
public function login(byval user as entity.userinfo) as boolean
dim confirmbll as new bll.loginbll
dim flag as boolean
' 查詢使用者名稱方法
flag = confirmbll.i***ist(user)
'查詢密碼方法
flag = confirmbll.confirmpwd(user)
return flag
end function
客戶端
dim euser as new entity.userinfo '例項化新的userinfo,用來傳遞b層的實體
'傳入引數
euser.username = txtusername.text.trim '將使用者名稱傳遞給實體層的username
euser.pwd = txtpwd.text.trim '將密碼傳遞給實體層的pwd
'呼叫外觀層,判斷登陸
dim loginui as new facade.use***c
if loginui.login(euser) = true then
msgbox("登陸成功")
else
exit sub
end if
說到底,外觀在我看來就是乙個藉口,為了復用,為了讓我們客戶端的維護更容易的介面,也許他讓業務邏輯更複雜一些,程式的執行稍慢一點,卻完全不能掩飾他為我們帶來的好處,那就是**的簡潔。 外觀模式的簡單使用
外觀模式是什麼?為什麼要使用外觀模式?使用外觀模式有什麼好處?外觀模式有什麼特點?本篇部落格就外觀模式的原理以及最近的使用心得做個總結。通俗的講,外觀模式就是給系統的一組介面提供乙個統一的介面,它定義了乙個介面,這個介面使得這個子系統更加容易使用。為什麼使用外觀模式?那我最近的例子來討論一下。來個包...
簡單理解設計模式之外觀模式
最近有點忙,沒什麼時間來寫部落格,所以一閒下來就想起來,還有很多的模式沒有跟大家一起分享,所以今天就來跟大家一起談談設計模式之外觀模式。1.什麼是外觀模式?說實話,平常我很少看見跟外觀模式有關的一些講解,也可能是我孤陋寡聞吧 閒話就不多說了,不管怎樣我們先來看看外觀模式的定義 為子系統的一組介面提供...
外觀模式 遊戲開發中的設計模式 外觀模式
外觀模式 facade 為子系統中的一組介面提供乙個一致的介面,此模式定義了乙個高層介面,這個介面使子系統更加容易使用 依賴倒轉原則 迪公尺特法則思想 namespace 外觀模式 外觀類 class facade public void methodone public void methodtw...