裝飾模式 使用者登入

2021-06-19 10:23:08 字數 4357 閱讀 3351

裝飾模式,動態的給乙個物件新增一些額外的職責,就增加功能來說,裝飾模式比生成子類更為靈活。

它是為已有功能動態新增更多功能的一種方式。當系統新增新功能的時候,是向舊的類中新增新的**。這些想你加的**通常裝飾了原有類的核心職責或主要行為。他們就在主類中加入了新的字段,新的方法和邏輯,從而增加了主類的複雜度。

1介面展示

2**展示

''' ''' 使用者登入窗體

'''

'''

public class frmlogin

''' ''' 單擊窗體中的確定按鈕

'''

'''

'''

'''

private sub btnlogin_click(sender as object, e as eventargs) handles btnlogin.click

dim userloginmain as new userlogin '定義了乙個封裝了裝束順序的類,呼叫此類並將引數傳入

userloginmain.userloginmain(txtusername.text, txtpassword.text, lblstate.text)

end sub

''' ''' 載入登入窗體

'''

'''

'''

'''

private sub frmlogin_load(sender as object, e as eventargs) handles mybase.load

datastate.items.add("上機")

datastate.items.add("下機")

end sub

end class

''' ''' 呼叫類,將客戶端的任務和裝飾順序封裝在此類中

'''

'''

public class userlogin

public sub userloginmain(byval uexist as string, byval upassword as string, byval uonduty as string)

dim loginmian as new login '定義登入的具體的類,相當於《大話設計》中裝飾模式的人

dim decoratetestexist as new testexist '具體的裝飾類---判斷使用者是否存在

dim decoratetestpassword as new testpassword '具體的裝飾類,判斷密碼是否正確

dim decorateteststate as new teststate '具體的裝飾類,判斷使用者的狀態。

'裝飾過程

decorateteststate.decorate(loginmian)

decoratetestpassword.decorate(decorateteststate)

decoratetestexist.decorate(decoratetestpassword)

decoratetestexist.testlogin(uexist, upassword, uonduty)

end sub

end class

''' ''' 登入的具體的類,相當於《大話設計》中裝飾模式的人

'''

'''

public class login

'public overrides sub testlogin(byval uexist as string, byval upassword as string, byval uonduty as string)

' frmlogin.hide()

'end sub

public overridable sub testlogin(byval uexist as string, byval upassword as string, byval uonduty as string)

frmmain .show

frmlogin.hide()

end sub

end class

public class testuser : inherits login

protected declogin as login '定義該類的保護屬性

''' ''' 裝飾的方法

'''

'''

'''

public sub decorate(byval declogin as login)

me.declogin = declogin

end sub

''' ''' 虛方法,判斷使用者是否能夠登入

'''

''' 使用者名稱

''' 密碼

''' 使用者狀態

'''

public overrides sub testlogin(byval uexist as string, byval upassword as string, byval uonduty as string)

'如果要裝飾的物件不為空,就呼叫裝飾方法   

if not (declogin is nothing) then

declogin.testlogin(uexist, upassword, uonduty)

end if

end sub

end class

public class testexist : inherits testuser

''' ''' 重寫父類方法,判斷使用者是否存在

'''

'''

'''

'''

'''

public overrides sub testlogin(byval uexist as string, byval upassword as string, byval uonduty as string)

if trim(uexist) = trim(frmlogin.datausername.text) then

mybase.testlogin(uexist, upassword, uonduty)

else

msgbox("使用者不存在", , "提示")

end if

end sub

end class

public class testpassword : inherits testuser

''' ''' 重寫父類方法,判斷密碼是否正確

'''

'''

'''

'''

'''

public overrides sub testlogin(byval uexist as string, byval upassword as string, byval uonduty as string)

if upassword = frmlogin.datapassword.text then

mybase.testlogin(uexist, upassword, uonduty)

else

msgbox("密碼不正確", , "提示")

end if

end sub

end class

public class teststate : inherits testuser

''' ''' 重寫父類方法,判斷使用者是否已經登入

'''

'''

'''

'''

'''

public overrides sub testlogin(byval uexist as string, byval upassword as string, byval uonduty as string)

if trim(frmlogin.datastate.text) = trim(frmlogin.lblstate.text) then

mybase.testlogin(uexist, upassword, uonduty)

else

msgbox("使用者在上機", , "提示")

end if

end sub

end class

裝飾器實現使用者驗證登入

在實現使用者驗證的登入的時候可以使用裝飾器工廠產生裝飾器,讓裝飾器得到引數,從而判斷登入型別,並驗證使用者登入條件,實現如下 def login type type def outer f def inner if type qq name input 請輸入使用者名稱 psw input 請輸入密...

py之裝飾器練習(使用者登入)

root admin redhat id id vip 多個裝飾器的應用場景 會採用多個裝飾器先驗證是否登陸成功 再驗證許可權是否足夠 import functools import inspect def is login fun functools.wraps fun if args 0 in ...

登入的裝飾器

def login decorator func 這個函式是乙個登入驗證的裝飾器,它還包含了對ajax登入的驗證 param func func是對誰去裝飾,這個引數是被裝飾的乙個函式 return 裝飾器裝飾過後,返回的乙個新功能函式 def login handler request,args,...