溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么在Java中實現(xiàn)一個責任鏈模式

發(fā)布時間:2021-04-30 14:42:42 來源:億速云 閱讀:228 作者:Leah 欄目:開發(fā)技術(shù)

本篇文章為大家展示了怎么在Java中實現(xiàn)一個責任鏈模式,內(nèi)容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細介紹希望你能有所收獲。

常用的java框架有哪些

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");
    }
}

Spring使用的責任鏈模式

過濾器,可以配置多個過濾器來干不同的事情,然后一個一個執(zhí)行。

FilterChain。

怎么在Java中實現(xiàn)一個責任鏈模式

上述內(nèi)容就是怎么在Java中實現(xiàn)一個責任鏈模式,你們學到知識或技能了嗎?如果還想學到更多技能或者豐富自己的知識儲備,歡迎關注億速云行業(yè)資訊頻道。

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI