**定義:**職責鏈模式(Chain OfResponsibility Pattern),使從個對象都有機會處理請求,從而避免請求的發送者和接收者之間的耦合關系。將這些對象連成一條鏈,并沿著這條鏈傳遞請求,直到有一個對象處理安為止。
類型:行為型模式。
概述:
???????職責鏈模式,行為型模式,說明其主要是通過行為來表現的。這里的行為,也可以理解為方法(Method)。職責鏈模式,將一堆處理事件的行為對象抽象為一個個的類。有些類似鏈表結構,每個類中都有一個指針,指向它的下一個類。這樣,當一個類處理完它要處理的事情之后,就將工作將給下一個類來處理。如果下一個類發現它暫時無事可做,它依然將職責轉到下一個類去處理。
???????職責鏈模式,好將每一個職責抽象成一個類。然后處理某件事,會有一系列的職責者,這樣就抽象出一系列的職責。然后用指針,像鏈表一樣,將它們鏈起來,就形成了職責鏈模式了。
????????一系列的職責,抽象出相同的接口,以及一個指針形成抽象類作為這一系列職責類的抽象基類。
???????例如,生產線的工人。每個人,針對生產產品的職責,去完成自己的職責,完成之后,就可以交給生產線上的下一位員工。有些生產線,對員工職責的順序有要求,有些生產線沒有要求。
類圖:

參與者:
1. Client,發起職責。
1. Worker,抽象基類,提供所有其他具體工人工作的接口,另外有一個指針,指向Worker類的變量。
1. Installer、Packer、QC,生產線上的三種工人,分別實現自己要做的工作,另外指向它的下一個職責者,如果沒有,則不用指出。
示例代碼:
~~~
using System;
using System.Collections.Generic;
using System.Text;
namespace Design14
{
// 抽象接口
abstract class Worker
{
public Worker worker;
public abstract void DoHandler();
}
class Installer : Worker
{
public Installer(Worker _worker)
{
this.worker = _worker;
}
public override void DoHandler()
{
Console.WriteLine("完成產品的基本組裝");
if (null != this.worker)
{
this.worker.DoHandler();
}
}
}
class Packer : Worker
{
public Packer(Worker _worker)
{
this.worker = _worker;
}
public override void DoHandler()
{
Console.WriteLine("完成產品的打包");
if (null != this.worker)
{
this.worker.DoHandler();
}
}
}
class QC : Worker
{
public QC(Worker _worker)
{
this.worker = _worker;
}
public override void DoHandler()
{
Console.WriteLine("完成產品的質檢");
if (null != this.worker)
{
this.worker.DoHandler();
}
}
}
// Client
class Program
{
static void Main(string[] args)
{
// 完成職責鏈的構建
Worker qc = new QC(null);
Worker packer = new Packer(qc);
Worker installer = new Installer(packer);
// 開戶執行職責
installer.DoHandler();
}
}
}
~~~
適用性:
1. 對于同一請求,有多個不同的處理方式。
1. 有多個請求,不知道哪一個請求正確。
注意:
1. 如果是C++,抽象類一定要注意析構函數一定要是虛函數。
1. 職責鏈并不一定要求是一條鏈條,也可以是像樹一樣.
優缺點:
1. 優點,降低了請求者與響應者之間的耦合度。增強了職責的靈活性,可以不同職責組合。
1. 缺點,當職責鏈比較多時,對于鏈的正確配置容易遺漏。
參考資料:
1. 《設計模式——可復用面向對象軟件基礎》
1. 《大話設計模式》
1. 《Head?First設計模式》
- 前言
- 設計模式六大原則
- 1——創建型模式之簡單工廠模式
- 2——創建型模式之工廠方法模式
- 3——創建型模式之抽象工廠模式
- 4——創建型模式之單例模式
- 5——創建型模式之建造者模式
- 6——創建型模式之原型模式
- 7——結構型模式之適配器模式
- 8——結構型模式之橋接模式
- 9——結構型模式之組合模式
- 10——結構型模式之裝飾者模式
- 11——結構型模式之外觀模式
- 12——結構型模式之享元模式
- 13——結構型模式之代理模式
- 14——行為型模式之職責鏈模式
- 15——行為型模式之命令模式
- 16——行為型模式之解釋器模式
- 17——行為型模式之迭代器模式
- 18——行為型模式之中介者模式
- 19——行為型模式之備忘錄模式
- 20——行為型模式之觀察者模式
- 21——行為型模式之狀態模式
- 22——行為型模式之策略模式
- 23——行為型模式之模板方法模型
- 24——行為型模式之訪問者模式
- 設計模式總結