詳解C++設計模式編程中責任鏈模式的應用

來源:互聯網
上載者:User
職責鏈模式:使多個對象都有機會處理請求,從而避免請求的寄件者和接收者之間的耦合關係。將這些對象連成一條鏈,並沿著這條鏈傳遞該請求,直到有一個對象處理它為止。

其思想很簡單,比如考慮員工要求加薪。公司的管理者一共有三級,總經理、總監、經理,如果一個員工要求加薪,應該向主管的經理申請,如果加薪的數量在經理的職權內,那麼經理可以直接批准,否則將申請上交給總監。總監的處理方式也一樣,總經理可以處理所有請求。這就是典型的職責鏈模式,請求的處理形成了一條鏈,直到有一個對象處理請求。給出這個例子的UML圖。

UML結構圖:

一個責任鏈模式例子
*該例子是三類售貨員處理訂單的情況
*如果訂單金額小於1000,則一級售貨員可以處理該訂單
*如果訂單金額小於10000,則二級售貨員可以處理該訂單
*如果訂單金額小於100000,則三級售貨員可以處理該訂單

using System;   /**//// <summary> ///售貨員介面,所有類型的售貨員必須實現該介面 /// </summary> interface ISalesMan {   string Name {set;get;} //售貨員名字   void SetNext(ISalesMan nextSalesMan); //設定下一級售貨員   void Process(Order order); //處理訂單 }   /**//// <summary> /// 訂單類 /// </summary> class Order {   private int orderAmount;     public int Amount   {     set{ this.orderAmount = value;}     get{ return this.orderAmount; }   } }   /**//// <summary> /// 一類售貨員 /// </summary> class FirstSalesMan : ISalesMan {   private ISalesMan nextSalesMan = null;   private string name = string.Empty;     ISalesMan 成員ISalesMan 成員 }   /**//// <summary> /// 二類售貨員 /// </summary> class SecondSalesMan : ISalesMan {   private ISalesMan nextSalesMan = null;   private string name = string.Empty;     ISalesMan 成員ISalesMan 成員 }   /**//// <summary> /// 三類售貨員 /// </summary> class ThirdSalesMan : ISalesMan {   private ISalesMan nextSalesMan = null;   private string name = string.Empty;     ISalesMan 成員ISalesMan 成員 }   class Client {   public static void Main(string[] args)   {     FirstSalesMan first = new FirstSalesMan();     first.Name = "firstMan";       SecondSalesMan second = new SecondSalesMan();     second.Name = "secondMan";       ThirdSalesMan third = new ThirdSalesMan();     third.Name = "thirdMan";       first.SetNext(second);     second.SetNext(third);       Order o = new Order();     o.Amount = 300;     first.Process(o);       o = new Order();     o.Amount = 1300;     first.Process(o);       o = new Order();     o.Amount = 11300;     first.Process(o);       Console.Read();   } }

責任鏈模式適用情境

有多個的對象可以處理一個請求,哪個對象處理該請求運行時刻自動確定。

你想在不明確指定接收者的情況下,向多個對象中的一個提交一個請求。

可處理一個請求的對象集合應被動態指定。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.