裝飾模式實戰之密碼加密驗證

記錄:

    最近有一個需求 根據前端傳的驗證密碼的類型來檢驗密碼是否符合規範

     正好前面剛學到了設計模式,覺得這個需求非常適合裝飾模式來完成。

      首先我們需要一個裝飾接口

/**
 *  裝飾 基類接口
 * @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;
    }

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章