關於責任鏈模式的一個例子
責任鏈模式就是現實中推責任的一種程式碼實現,這個用於校驗是不錯的選擇,有如下例子,主要完成對名稱、長度、大小的校驗:
首先定義一抽象類:BaseChecker
public abstract class BaseChecker {
private BaseChecker checker;
protected CheckResult genSuccessResult() {
return new CheckResult(true, "000000", "");
}
protected CheckResult genFailResult(String errorCode, String errorMsg) {
return new CheckResult(false, errorCode, errorMsg);
}
public CheckResult doCheck() {
CheckResult result = check();
if (result.isPass()) {
return checker == null ? genSuccessResult() : checker.doCheck();
}
return result;
}
protected abstract CheckResult check();
public BaseChecker getChecker() {
return checker;
}
public void setChecker(BaseChecker checker) {
this.checker = checker;
}
}
以下是幾個校驗類:
public class FacadeChecker extends BaseChecker {
@Override
protected CheckResult check() {
setChecker(new NameChecker());
return genSuccessResult();
}
}
public class NameChecker extends BaseChecker {
public CheckResult check() {
System.err.println("名稱校驗");
setChecker(new LengthChecker());
return genSuccessResult();
}
}
public class LengthChecker extends BaseChecker {
@Override
public CheckResult check() {
System.err.println("長度校驗");
setChecker(new SizeChecker());
return genSuccessResult();
}
}
public class SizeChecker extends BaseChecker {
@Override
public CheckResult check() {
System.err.println("大小校驗");
setChecker(new DefaultChecker());
return genSuccessResult();
}
}
public class DefaultChecker extends BaseChecker {
@Override
public CheckResult check() {
System.err.println("校驗透過");
return genSuccessResult();
}
}
public class CheckResult {
private boolean isPass;
private String code;
private String message;
public CheckResult(boolean isPass, String code, String message) {
this.isPass = isPass;
this.code = code;
this.message = message;
}
public boolean isPass() {
return isPass;
}
public void setPass(boolean isPass) {
this.isPass = isPass;
}
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
}
呼叫如下所示:
public class Client {
public static void main(String[] args) {
BaseChecker checker = new FacadeChecker();
System.err.println(checker.doCheck().getMessage());
}
}
首先定義一抽象類:BaseChecker
public abstract class BaseChecker {
private BaseChecker checker;
protected CheckResult genSuccessResult() {
return new CheckResult(true, "000000", "");
}
protected CheckResult genFailResult(String errorCode, String errorMsg) {
return new CheckResult(false, errorCode, errorMsg);
}
public CheckResult doCheck() {
CheckResult result = check();
if (result.isPass()) {
return checker == null ? genSuccessResult() : checker.doCheck();
}
return result;
}
protected abstract CheckResult check();
public BaseChecker getChecker() {
return checker;
}
public void setChecker(BaseChecker checker) {
this.checker = checker;
}
}
以下是幾個校驗類:
public class FacadeChecker extends BaseChecker {
@Override
protected CheckResult check() {
setChecker(new NameChecker());
return genSuccessResult();
}
}
public class NameChecker extends BaseChecker {
public CheckResult check() {
System.err.println("名稱校驗");
setChecker(new LengthChecker());
return genSuccessResult();
}
}
public class LengthChecker extends BaseChecker {
@Override
public CheckResult check() {
System.err.println("長度校驗");
setChecker(new SizeChecker());
return genSuccessResult();
}
}
public class SizeChecker extends BaseChecker {
@Override
public CheckResult check() {
System.err.println("大小校驗");
setChecker(new DefaultChecker());
return genSuccessResult();
}
}
public class DefaultChecker extends BaseChecker {
@Override
public CheckResult check() {
System.err.println("校驗透過");
return genSuccessResult();
}
}
public class CheckResult {
private boolean isPass;
private String code;
private String message;
public CheckResult(boolean isPass, String code, String message) {
this.isPass = isPass;
this.code = code;
this.message = message;
}
public boolean isPass() {
return isPass;
}
public void setPass(boolean isPass) {
this.isPass = isPass;
}
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
}
呼叫如下所示:
public class Client {
public static void main(String[] args) {
BaseChecker checker = new FacadeChecker();
System.err.println(checker.doCheck().getMessage());
}
}
相關文章
- 責任鏈模式模式
- 聊一聊責任鏈模式模式
- 每天一個設計模式之責任鏈模式設計模式
- 責任鏈模式妙用模式
- 責任鏈模式探究模式
- 「責任鏈模式」栗子模式
- 責任鏈模式的實踐模式
- 設計模式 —— 責任鏈模式設計模式
- 設計模式-責任鏈模式設計模式
- 設計模式(責任鏈模式)設計模式
- 設計模式——責任鏈模式設計模式
- 利用責任鏈模式設計一個攔截器模式
- PHP-責任鏈模式PHP模式
- 這就是『責任鏈模式』?模式
- 5、php責任鏈模式PHP模式
- 強化責任鏈模式模式
- 責任鏈模式探討模式
- 23_責任鏈模式模式
- 設計模式(三) 責任鏈模式設計模式
- Java責任鏈模式(ChainofResponsibility模式)Java模式AI
- 設計模式(十四) 責任鏈模式設計模式
- 設計模式(十八):責任鏈模式設計模式
- 設計模式之——責任鏈模式設計模式
- 設計模式之責任鏈模式設計模式
- Netty中的責任鏈模式Netty模式
- 設計模式(四)OkHttp的責任鏈模式設計模式HTTP
- 我的Java設計模式-責任鏈模式Java設計模式
- 責任鏈模式(Chain Of Responsibility)模式AI
- 責任鏈模式(案例解析)(9)模式
- PHP 設計模式之責任鏈模式PHP設計模式
- 設計模式系列之「責任鏈模式」設計模式
- JAVA設計模式之責任鏈模式Java設計模式
- 極簡設計模式-責任鏈模式設計模式
- Chain of responsibility-責任鏈模式AI模式
- 用Lambda重構責任模式鏈模式
- 設計模式第七講-責任鏈模式設計模式
- 代理模式增強之路(代理+責任鏈模式)模式
- Java學設計模式之責任鏈模式Java設計模式