1. 程式人生 > >設計模式與應用:責任鏈模式

設計模式與應用:責任鏈模式

本文介紹責任鏈模式的基本結構、應用場景、以及現有一些成熟框架的應用

簡介

Chain of Responsibility(CoR)模式也叫職責鏈模式、責任鏈模式。是行為模式之一

責任鏈模式構造一系列分別擔當不通的職責的類的物件來共同完成一個任務,他們像鏈條一樣緊密相連,所以被稱作職責鏈模式。

簡單一點理解就是:工廠流水線工作

舉例應用場景說明

  • 一場足球賽,A隊的2個組成隊a、b。a隊踢上半場,踢完後交給b隊踢下半場,一起完成這場球賽。
  • 吃一條魚:媽媽吃魚頭,吃完讓兒子吃魚身體,吃完給爸爸吃魚尾巴。
  • Servlet容器的過濾器

責任鏈就是這樣有一條執行鏈來完成一件事。

職責和角色

  • Handler:處理類的抽象父類
  • concreteHandler:具體的處理類

設計使用責任鏈的基本流程

  1. 組織物件鏈:將某人物的所有職責執行物件以鏈的形式加以組織起來
  2. 訊息或請求的傳遞:將訊息或請求沿著物件鏈傳遞,讓處於物件鏈中的物件得到處理機會
  3. 物件鏈中物件的職責分配:不同物件完成不同職責
  4. 任務的完成:物件鏈末尾的物件結束任務並停止訊息或請求的繼續傳遞。

結構圖

這裡寫圖片描述

實現

同樣以造車的流水線為需求

這裡寫圖片描述

處理器的抽象類

package com.mym.designmodel.CoRModel;

/**
 * 職責:Handler 職責類的抽象父類
 */
public abstract class AbstractCarHandler { AbstractCarHandler carHandler = null; public abstract void carHandler(); public AbstractCarHandler setNextCarHandler(AbstractCarHandler nextCarHandler){ this.carHandler = nextCarHandler; return this.carHandler; } /**職責下傳*/
protected void doChain(){ if(this.carHandler != null){ this.carHandler.carHandler(); } } }

責任鏈一個執行者1

package com.mym.designmodel.CoRModel;

/**
 * 職責:concreteHandler 具體的處理類
 */
public class CarHeadHandler extends AbstractCarHandler {
    @Override
    public void carHandler() {
        System.out.println("處理車的head!");

        //下傳
        this.doChain();
    }
}

責任鏈一個執行者2

package com.mym.designmodel.CoRModel;

/**
 * 職責:concreteHandler 具體的處理類
 */
public class CarBodyHandler extends AbstractCarHandler {
    @Override
    public void carHandler() {
        System.out.println("處理車的body!");

        //下傳
        this.doChain();
    }
}

責任鏈一個執行者3

package com.mym.designmodel.CoRModel;

/**
 * 職責:concreteHandler 具體的處理類
 */
public class CarTailHandler extends AbstractCarHandler {
    @Override
    public void carHandler() {
        System.out.println("處理車的tail!");

        //下傳
        this.doChain();
    }
}

測試

測試相當於客戶端client

package com.mym.designmodel.CoRModel;

/**
 * 測試
 */
public class MainClass {

    public static void main(String[] args) {
        AbstractCarHandler carheadHandle = new CarHeadHandler();
        AbstractCarHandler carbodyHandle = new CarBodyHandler();
        AbstractCarHandler carTailHandler = new CarTailHandler();

        //組裝責任鏈
        carheadHandle.setNextCarHandler(carbodyHandle).setNextCarHandler(carTailHandler);

        //鏈頭部開始執行
        carheadHandle.carHandler();
    }
}

執行結果:

處理車的head!
處理車的body!
處理車的tail!

責任鏈在於構造一個鏈式執行的流程,啟動執行時只需要啟動鏈的頭部即可。

責任鏈的使用

筆者列舉一些框架中比較典型的責任鏈處理

  • Restlet中的Finder路由。Restlet中的top類就是Restlet.class,中層的各個元件由Finder連結起來,一個請求的路由過程就是一個責任鏈的執行過程。
  • Servlet的filter
  • springMVC的攔截器
  • Netty中通道上的Handler也是責任鏈處理模式
    等等。。。

責任鏈模式常使用在對訊息、請求的過濾上(預處理)。

相關推薦

設計模式應用責任模式

本文介紹責任鏈模式的基本結構、應用場景、以及現有一些成熟框架的應用 簡介 Chain of Responsibility(CoR)模式也叫職責鏈模式、責任鏈模式。是行為模式之一 責任鏈模式構造一系列分別擔當不通的職責的類的

設計模式應用單例模式

簡介 物件建立型模式 核心:一個類只生成唯一例項物件,構造方法私有化禁止外部建立物件。GoF對單例模式的定義是:保證一個類只有一個例項存在,同時提供能對該例項加以訪問的全域性訪問方法(靜態方法) 總結就是如下: - 類中唯一例項引用 -

設計模式責任模式

web應用開發 軟件 ignore AS 對象 rec ons return 3D 責任鏈模式(ChainOfResponsibilityPattern)屬於 行為型模式的一種,將請求沿著一條鏈傳遞,直到該鏈上的某個對象處理它為止。概述 定義如下:一個請求有多個對象來處理,

23種設計模式(11)責任模式

cli 傳遞 處理請求 nco 所有 lean 實現 簡單明了 concrete 定義:使多個對象都有機會處理請求,從而避免了請求的發送者和接收者之間的耦合關系。將這些對象連成一條鏈,並沿著這條鏈傳遞該請求,直到有對象處理它為止。 類型:行為類模式。 類圖: 首先來看

設計模式11責任模式

責任鏈模式 定義:為了避免請求傳送者與接收者耦合在一起,讓多個物件都有可能接收請求,將這些物件連線成一條鏈,並且沿著這條鏈傳遞請求,直到有物件處理它為止,這就是責任鏈模式。 舉個栗子咯,當週杰倫要在你的城市開演唱會時,而你恰好有課,這時候咋辦呢?總不能不去吧,所以只有向老師請假咯。而請假的話

設計模式(六)責任模式

責任鏈設計模式是行為設計模式之一。 責任鏈模式用於在軟體設計中實現鬆散耦合,其中來自客戶端的請求被傳遞到物件鏈以處理它們。然後鏈中的物件將自己決定誰將處理請求以及是否需要將請求傳送到鏈中的下一個物件。 JDK中的責任鏈模式示例 讓我們看一下JDK中責任鏈模式的例子,然後我們將繼續實現這種模式的真例項子。我們

小白設計模式責任模式

定義 將多個接收物件(處理者)組成鏈式結構,按序對輸入的訊號事件進行處理直到事件被處理。 主要組成 抽象處理者(Handler) : 責任鏈上每一環的處理物件,抽象處理介面。 具體處理者(concrete Handler) : 實現Handler相關介面,並持有責任鏈

設計模式應用代理模式(三種詳解)

簡介 Proxy代理模式,是構造型的設計模式之一 代理模式為其他物件提供代理以控制這個物件的訪問。 所謂代理,是指具有與代理元(被代理物件)具有相同介面的類。client需要通過代理與被代理的目標類互動,代理類就是在互動的過程中(前後

設計模式責任模式(Chain of Responsibility)

 使多個物件都有機會處理請求,從而避免請求的傳送者和接受者之間的耦合關係。將這些物件連成一條鏈,並沿著這條鏈傳遞該請求,知道有一個物件處理它為止。 責任鏈模式的角色: 1. 抽象處理者角色(Handler):定義出一個處理請求的介面。如果需要,介面可以定

設計模式應用外觀模式

本文通俗的介紹外觀模式,且與策略模式進行對比及選用 簡介 Facade模式也叫外觀模式,是由GoF提出的23種設計模式種的一種 Facade模式為一組具有類似功能的類群,比如類庫,子系統等等,提供一個一致的簡單的介面。這個

java設計模式(五)責任模式

args 測試 處理 next 設計 ted static rgs stat   很多對象有每個對象對其下家的引用而連接起來形成一條鏈,請求在這條鏈上傳遞,直到鏈上某個對象決定處理此請求,應用場景如單位審批流程等。   要點:1)抽象處理者角色:定義處理請求接口及設定下家引

設計模式-(15)責任模式 (swift版)

uiview ike recent ios part mage protoc ins handle 一,概念:   責任鏈模式(Chain of Responsibility Pattern)為請求創建了一個接收者對象的鏈。這種模式給予請求的類型,對請求的發送者和接收者進行

設計模式(13)責任模式

模式介紹 責任鏈設計模式試圖通過給不止一個物件處理特定請求的機會,來避免將請求耦合到特定接收器。 本質上,我們沿著該物件的潛在處理程式的“鏈”傳遞物件,直到其中一個處理程式處理請求。 示例 我們還是以餐館建模。 想一下,當廚房需要採購新裝置,廚師長需要像Boss請示。 我們的店裡的採購流程是這樣的:

設計模式》學習筆記——責任模式

        責任鏈模式(Chain of Responsibility Pattern)為請求建立了一個接收者物件的鏈,這種模式給予請求的型別,對請求的傳送者和接收者進行解耦,屬於行為型模式。在這種模式中,通常每個接收者都包含對另一個接收者的引用。如果一個物件不能處理該請

設計模式-十六篇責任模式

1. 定義      責任鏈模式的定義:Avoid  couping the sender of a request to its receiver by giving more than one object a chance to handle the request.

設計模式學習筆記】責任模式

責任鏈模式,將請求和處理物件分離,將請求傳送給一個請求處理入口後,誰具有請求的處理許可權,誰就處理請求。 文章目錄 1.1 請求入口Position 1.2 繼承Position 1.3 最近聚餐,周知周知 1.4

Design Patterns in Android責任模式

前言 非常抱歉,本系列部落格長達半年沒更新了,今日偶得靈感,更新一波《設計模式Android篇:責任鏈模式》。點選此處檢視《Design Patterns in Android》系列其他文章。 責任鏈模式定義 職責鏈(Chain-of-res

23種設計模式C++例項之責任模式

#include <iostream> using namespace std; /* * 責任鏈模式 * 很多物件由每一個物件對其下家的引用而連線起來形成一條鏈。 * 請求在這個

設計模式學習總結(17) 責任模式

關鍵程式碼:Handler裡面聚合他自己,在HanleRequest裡判斷是否合適,如果沒達到條件則向下傳遞,向誰傳遞之前set進去應用例項:1、紅樓夢中的“擊鼓傳花”2、JS中的事件冒泡 3、JAVA WEB中 Apache Tomcat 的對Encoding的 處理,Struts2 的攔截器, jsp s

Java設計模式應用——責任模式

調用 stat 事務 抽象類 pan 主動 需要 return 包含 生產一個產品,需要依次執行多個步驟,才能完成,那麽是使用責任鏈模式則是極好的。 在性能告警模塊開發過程中,創建一條告警規則需要執行閾值解析,中間表生成,流任務生成,規則入庫,告警事件入庫等諸多操作。如果把