前言
方便寫出優雅,解耦,高內聚,高復用的代碼。
Demo
// 1. 定義驗證器接口(責任鏈模式)
public interface Validator {Validator setNext(Validator next);boolean validate(Data data);
}// 2. 創建抽象驗證器(模板方法模式)
public abstract class AbstractValidator implements Validator {protected Validator next;@Overridepublic Validator setNext(Validator next) {this.next = next;return next;}@Overridepublic boolean validate(Data data) {// 模板方法定義驗證流程boolean result = doValidate(data);// 如果當前驗證通過且有下一個驗證器,繼續驗證if (result && next != null) {return next.validate(data);}return result;}// 子類實現具體驗證邏輯protected abstract boolean doValidate(Data data);
}// 3. 實現具體驗證器
public class FormatValidator extends AbstractValidator {@Overrideprotected boolean doValidate(Data data) {return data != null && data.getFormat().equals("valid");}
}public class RangeValidator extends AbstractValidator {@Overrideprotected boolean doValidate(Data data) {return data.getValue() > 0 && data.getValue() < 100;}
}// 4. 創建驗證器工廠(工廠模式)
public class ValidatorFactory {public static Validator createValidatorChain() {@Resourceprivate FormatValidator formatValidator;@Resourceprivate RangeValidator rangeValidator;// 構建驗證器鏈formatValidator.setNext(rangeValidator);return formatValidator;}
}// 5. 客戶端使用
Validator validator = ValidatorFactory.createValidatorChain();
boolean isValid = validator.validate(new Data("valid", 50));
三、解析
-
這里的工廠設計模式主要用來構建責任鏈是怎么鏈的。和策略+工廠模式有所不同,策略+工廠模式的工程模式是為了根據一個 Code 獲取哪個策略。
-
結合模板設計模式主要是為了干掉重復的代碼,每個單獨的子類可能有很多公共的代碼,這時候增加模板設計模式就會優雅很多。