記錄:
最近有一個需求 根據前端傳的驗證密碼的類型來檢驗密碼是否符合規範
正好前面剛學到了設計模式,覺得這個需求非常適合裝飾模式來完成。
首先我們需要一個裝飾接口
/**
* 裝飾 基類接口
* @author
*/
public interface PasswordDecorate {
/**
* 驗證密碼規範
* @param password 密碼
* @return 成功返回 true 失敗返回 ServiceException 異常
* @throws ServiceException
*/
boolean verifyPassword(String password);
}
然後被裝飾的實現類
/**
* 驗證數字
* @author
*/
public class DigitalVerify implements PasswordDecorate {
Pattern pattern = Pattern.compile(".*[0-9]{1,}.*");
@Override
public boolean verifyPassword(String password) {
Matcher matcher = pattern.matcher(password);
boolean matches = matcher.matches();
if (!matches){
throw new ServiceException("密碼必須包含數字");
}
return true;
}
}
因爲就一個被裝飾者 就沒有使用抽象類了 下面就是裝飾實現類
/**
* 驗證是否包含大寫字母
* @author
*/
public class CapitalLetterVerify implements PasswordDecorate {
private PasswordDecorate passwordDecorate;
public CapitalLetterVerify(PasswordDecorate passwordDecorate){
this.passwordDecorate = passwordDecorate;
}
Pattern pattern = Pattern.compile(".*[A-Z]{1,}.*");
@Override
public boolean verifyPassword(String password) {
if (passwordDecorate != null){
passwordDecorate.verifyPassword(password);
}
Matcher matcher = pattern.matcher(password);
boolean matches = matcher.matches();
if (!matches){
throw new ServiceException("密碼必須包含大寫字母");
}
return true;
}
}
/**
*
* 驗證是否包含小寫字母
* @author
*/
public class LowerCaseVerify implements PasswordDecorate {
private PasswordDecorate passwordDecorate;
public LowerCaseVerify(PasswordDecorate passwordDecorate){
this.passwordDecorate = passwordDecorate;
}
Pattern pattern = Pattern.compile(".*[a-z]{1,}.*");
@Override
public boolean verifyPassword(String password) {
if (passwordDecorate != null){
passwordDecorate.verifyPassword(password);
}
Matcher matcher = pattern.matcher(password);
boolean matches = matcher.matches();
if (!matches){
throw new ServiceException("密碼必須包含小寫字母");
}
return true;
}
}
public PasswordDecorate createVerifyObj(String obj, Integer enable,PasswordDecorate passwordDecorate) {
if (enable == 1) {
switch (obj) {
case "digitalVerify":
passwordDecorate = new DigitalVerify();
break;
case "lowerCaseVerify":
passwordDecorate = new LowerCaseVerify(passwordDecorate);
break;
case "capitalLetterVerify":
passwordDecorate = new CapitalLetterVerify(passwordDecorate);
break;
case "specialVerify":
passwordDecorate = new SpecialVerify(passwordDecorate);
break;
default:
break;
}
}
return passwordDecorate;
}