運用簡單工廠實現登陸權限的選擇
在敲機房收費係統重構版之間我們學習了設計模式,但是除了書上的實例外我們並沒有再去深究這些東西,同時可敢肯定的是我們在剛學習設計模式的時候也不是很清楚每個具體的處理邏輯。就像我們之前學過的很多東西一樣,隻是先了解一下有這麼個東西存在,以後用的時候再深究其中的原理。
在機房收費係統中用簡單工廠或者是策略模式最好的地方其實是處理固定用戶和臨時用戶結賬下機的時候。不同級別的用戶,按照不用的方式進行結算(寫到這裏不禁想起來沒有接觸設計模式之前還以為這根數據庫的設計有關係)。
下麵是我在B層關於簡單工廠的實現代碼
Imports System.Windows.Forms '定義一個基類 Public Class PermissionsSuper Public Overridable Sub ChooseP(ByVal menu1 As ToolStripMenuItem, ByVal menu2 As ToolStripMenuItem, ByVal menu3 As ToolStripMenuItem) End Sub End Class '一般用戶類 Public Class ChooseGeneral Inherits PermissionsSuper Public Overrides Sub ChooseP(ByVal menu1 As ToolStripMenuItem, ByVal menu2 As ToolStripMenuItem, ByVal menu3 As ToolStripMenuItem) menu1.Enabled = True menu2.Enabled = False menu3.Enabled = False End Sub End Class '操作員,管理員類似一般用戶 Public Class ChooseOperator '權限工廠 Public Class PermissionsFactory Public Shared Function ChoosePermissions(ByVal LoginUserLevel As String) As PermissionsSuper Dim ps As PermissionsSuper = Nothing Select Case (LoginUserLevel) Case "一般用戶" ps = New ChooseGeneral() Exit Select Case "操作員" ps = New ChooseOperator() Exit Select Case "管理員" ps = New ChooseManager() Exit Select End Select Return ps End Function End Class
下麵是U層中實現的代碼:
'定義並賦值菜單欄變量 Dim menu1, menu2, menu3 As ToolStripItem menu1 = GeneralUser menu2 = OperatingUser menu3 = ManagerUser '定義一個變量獲得用戶級別 Dim LoginUserLevel As String = UserLevel '在權限工廠中選在要調用的子工場 Dim pSuper As RechargeBLL.PermissionsSuper pSuper = RechargeBLL.PermissionsFactory.ChoosePermissions(LoginUserLevel) '執行子工廠 Call pSuper.ChooseP(menu1, menu2, menu3)
說實話除了策略模式由於看過“永和收銀係統(真的很強大,維護該係統壓力不小啊)”後台的配置管理,抽象工廠加反射外其他的模式現在還體會不了它們的偉大之處。反倒是覺得加上設計模式後,係統的實現變得複雜了,就在這個登錄時的權限選擇,其實用If.....elseif.....或者select case實現起來要方便得多。
可能關於麵向對象、設計模式的各種好處聽了很多,但是由於在實際的學習過程中還沒有遇到具體的問題,所以實際的感受也隻有麻煩了。知道某個知識點容易,理解起來還是要費些精力;且學且感悟!
最後更新:2017-04-03 08:26:11