您好,登錄后才能下訂單哦!
本篇文章為大家展示了怎么在Java中實現(xiàn)一個責任鏈模式,內(nèi)容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細介紹希望你能有所收獲。
1.SpringMVC,Spring Web MVC是一種基于Java的實現(xiàn)了Web MVC設計模式的請求驅(qū)動類型的輕量級Web框架。2.Shiro,Apache Shiro是Java的一個安全框架。3.Mybatis,MyBatis 是支持普通 SQL查詢,存儲過程和高級映射的優(yōu)秀持久層框架。4.Dubbo,Dubbo是一個分布式服務框架。5.Maven,Maven是個項目管理和構(gòu)建自動化工具。6.RabbitMQ,RabbitMQ是用Erlang實現(xiàn)的一個高并發(fā)高可靠AMQP消息隊列服務器。7.Ehcache,EhCache 是一個純Java的進程內(nèi)緩存框架。
@Data public class Member { private String loginName; private String loginPass; private String roleName; public Member(String loginName, String loginPass) { this.loginName = loginName; this.loginPass = loginPass; } }
傳統(tǒng)編碼,在同一個方法里一個一個進行判斷。
public class MemberService { public void login(String loginName, String loginPass) { if (StringUtils.isEmpty(loginName) || StringUtils.isEmpty(loginPass)) { System.out.println("用戶名或密碼不為空,校驗失敗"); return; } System.out.println("用戶名、密碼校驗成功"); if (!"James".equals(loginName)) { System.out.println("用戶不存在"); return; } Member member = new Member(); member.setRoleName("管理員"); if (!"管理員".equals(member.getRoleName())) { System.out.println("您不是管理員,沒有權(quán)限"); return; } System.out.println("登錄成功"); } public static void main(String[] args) { MemberService memberService = new MemberService(); memberService.login("Ja1mes", "null"); } }
使用責任鏈和建造者結(jié)合模式,將每個步驟處理連起來。
抽象出處理類。
public abstract class Handler<T> { // 指向下一個處理類 protected Handler chain; // 設置下一個處理類 public void next(Handler handler) { this.chain = handler; } // 具體處理邏輯 public abstract void doHandler(Member member); // 構(gòu)建一條鏈式處理邏輯 public static class Builder<T> { // 第一個處理類 private Handler<T> head; // 最后一個處理類 private Handler<T> tail; // 從頭開始添加處理類 public Builder<T> addHandler(Handler<T> handler) { if (this.head == null) { // 只有一個處理類,所以不需要設置下一個處理類 this.head = this.tail = handler; return this; } // 設置下一個處理類 this.tail.next(handler); // 尾部設置為下一個處理類的引用 this.tail = handler; return this; } // 返回的是第一個處理類 public Handler<T> builder() { return this.head; } } }
具體實現(xiàn)三個處理類,來進行分別校驗
public class ValidateHandler extends Handler { @Override public void doHandler(Member member) { if (StringUtils.isEmpty(member.getLoginName()) || StringUtils.isEmpty(member.getLoginPass())) { System.out.println("用戶名或密碼不為空,校驗失敗"); return; } System.out.println("用戶名、密碼校驗成功"); chain.doHandler(member); } } public class LoginHandler extends Handler { @Override public void doHandler(Member member) { if (!"James".equals(member.getLoginName())){ System.out.println("用戶名不存在"); return; } System.out.println("登錄成功"); member.setRoleName("管理員"); chain.doHandler(member); } } public class AuthHandler extends Handler { @Override public void doHandler(Member member) { if (!"管理員".equals(member.getRoleName())) { System.out.println("您不是管理員,沒有權(quán)限"); return; } System.out.println("您是管理員,允許操作"); } }
public class MemberService { public void login(String loginName, String loginPass) { // 構(gòu)建一條鏈式處理 Handler.Builder builder = new Handler.Builder() .addHandler(new ValidateHandler()) .addHandler(new LoginHandler()) .addHandler(new AuthHandler()); // 從第一個處理類執(zhí)行到最后一個處理類 builder.builder().doHandler(new Member("James11", "1234")); } public static void main(String[] args) { MemberService memberService = new MemberService(); memberService.login("Ja1mes", "1234"); } }
過濾器,可以配置多個過濾器來干不同的事情,然后一個一個執(zhí)行。
FilterChain。
上述內(nèi)容就是怎么在Java中實現(xiàn)一個責任鏈模式,你們學到知識或技能了嗎?如果還想學到更多技能或者豐富自己的知識儲備,歡迎關注億速云行業(yè)資訊頻道。
免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。