設計模式入門:責任鏈模式

原文地址:http://te-amo.site/user/article/info/ARTICLE20180509060141975
文章中部分定義和解釋性文字,都是引用百度百科,主要的代碼及場景應用爲本人原創

責任鏈模式,很多對象由每一個對象對其下家的引用而連接起來形成一條鏈,請求在這個鏈上傳遞,直到鏈上的某一個對象決定處理此請求。

場景:公司常見的事情——簽字,一個待批准的任務,由管理者一層一層的批准

結構

  • 抽象處理者(Handler)角色:定義出一個處理請求的接口,接口中定義有對下家的引用。
  • 具體處理者(ConcreteHandler)角色:具體處理者接到請求後,可以選擇將請求處理掉,或者將請求傳給下家。

設計

這裏寫圖片描述

實現

代碼地址:https://github.com/telundusiji/designpattern

抽象處理者

@Data
public abstract class Handler {
    private Handler handler;

    public abstract boolean handleRequest(String task);
}

具體處理者 小組長

@Slf4j
public class TeamLeader extends Handler{
    @Override
    public boolean handleRequest(String task) {
        if("task".equals(task)){
            log.info("組長批准{}",task);
            return getHandler().handleRequest(task);
        }
        log.info("組長駁回{}請求",task);
        return false;
    }
}

具體處理者 部門長

@Slf4j
public class HeadOfDepartment extends Handler {
    @Override
    public boolean handleRequest(String task) {
        if("task".equals(task)){
            log.info("部門長批准{}",task);
            return getHandler().handleRequest(task);
        }
        log.info("部門長駁回{}請求",task);
        return false;
    }
}

具體處理者 技術總監

@Slf4j
public class CTO extends Handler {
    @Override
    public boolean handleRequest(String task) {
        if("task".equals(task)){
            log.info("CTO批准{}",task);
            return true;
        }
        log.info("CTO駁回{}請求",task);
        return false;
    }
}

經典應用

Filter(過濾器)就是一個經典的責任鏈模式

  • 抽象處理者:Filter
  • 具體處理者:實現Filter的類
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章