裝飾者模式應用示例 表單驗證

2021-10-25 16:01:57 字數 2547 閱讀 1265

在乙個 web 專案中,可能存在非常多的表單,如註冊、登入、修改使用者資訊等。在表單資料提交給後台之前,常常要做一些校驗,比如登入的時候需要驗證使用者名稱和密碼是否為空,**如下:

表單驗證title

>

name

="viewport"

content

="width=device-width, initial-scale=1"

>

>

使用者名稱:"username"

type

="text"

/>

密碼: "password"

type

="password"

/>

"submitbtn"

type

="button"

value

="提交"

>

body

>

html

>

表單的校驗**:

;// ajax 具體實現略

}submitbtn.

onclick

=function()

formsubmit 函式在此處承擔了兩個職責,除了提交 ajax 請求之外,還要驗證使用者輸入的合法性。這種**一來會造成函式臃腫,職責混亂,二來談不上任何可復用性。

下面對**進行優化,分離校驗輸入和提交 ajax 請求的**,我們把校驗輸入的邏輯放到 validata函式中,並且約定當 validata 函式返回 false 的時候,表示校驗未通過,**如下:

現在的**已經有了一些改進,我們把校驗的邏輯都放到了 validata 函式中,但formsubmit函式的內部還要計算 validata 函式的返回值,因為返回值的結果表明了是否通過校驗。

接下來進一步優化這段**,使 validata 和 formsubmit 完全分離開來。首先通過function.prototype.before給函式擴充套件乙個before函式,傳入乙個引數beforefn表示要執行原函式之前先執行的**;如果 beforefn 的執行結果返回 false,表示不再執行後面的原函式,**如下:

在這段**中,校驗輸入和提交表單的**完全分離開來,它們不再有任何耦合關係,

formsubmit = formsubmit.before( validata )這句**,如同把校驗規則動態接在formsubmit 函式之前,validata 成為乙個即插即用的函式,它甚至可以被寫成配置檔案的形式,這有利於我們分開維護這兩個函式。

裝飾者模式簡單示例 一

例項參考於 headfirst設計模式 public abstract class beverage cost必須在子類中實現 public abstract double cost public abstract class condimentdecorator extends beverage ...

裝飾者模式 Decorator 的c 實現示例

水平有限,請多指正!裝飾者模式 decorator 示例 例子改編自 設計者模式解析 第二版 214頁,人民郵電出版社 意圖 動態的給乙個物件新增職責 即提供了 即插即用 方法,不用 重新編譯已有部分。問題 要使用的物件將執行所需的基本功能。但是,可能需要為這個對 像新增某些功能,這些附加的功能可能...

裝飾者模式

裝飾者模式 動態地將責任附加到物件上。若要擴張功能,裝飾者提供了比繼承更有彈性的替代方案。裝飾者可以在所委託被裝飾者的行為之前或之後,加上自己的行為,以達到特定的目的。裝飾者與被裝飾者物件具有相同的超型別。include include using namespace std class bever...