<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                **定義:**職責鏈模式(Chain OfResponsibility Pattern),使從個對象都有機會處理請求,從而避免請求的發送者和接收者之間的耦合關系。將這些對象連成一條鏈,并沿著這條鏈傳遞請求,直到有一個對象處理安為止。 類型:行為型模式。 概述: ???????職責鏈模式,行為型模式,說明其主要是通過行為來表現的。這里的行為,也可以理解為方法(Method)。職責鏈模式,將一堆處理事件的行為對象抽象為一個個的類。有些類似鏈表結構,每個類中都有一個指針,指向它的下一個類。這樣,當一個類處理完它要處理的事情之后,就將工作將給下一個類來處理。如果下一個類發現它暫時無事可做,它依然將職責轉到下一個類去處理。 ???????職責鏈模式,好將每一個職責抽象成一個類。然后處理某件事,會有一系列的職責者,這樣就抽象出一系列的職責。然后用指針,像鏈表一樣,將它們鏈起來,就形成了職責鏈模式了。 ????????一系列的職責,抽象出相同的接口,以及一個指針形成抽象類作為這一系列職責類的抽象基類。 ???????例如,生產線的工人。每個人,針對生產產品的職責,去完成自己的職責,完成之后,就可以交給生產線上的下一位員工。有些生產線,對員工職責的順序有要求,有些生產線沒有要求。 類圖: ![](https://box.kancloud.cn/2016-08-19_57b6b466a4d9e.jpg) 參與者: 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設計模式》
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看