首頁  >  文章  >  後端開發  >  詳解C++設計模式程式設計中責任鏈模式的應用

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

高洛峰
高洛峰原創
2017-01-19 17:01:361366瀏覽

職責鏈模式:使多個物件都有機會處理請求,從而避免請求的發送者和接收者之間的耦合關係。將這些物件連成一條鏈,並沿著這條鏈傳遞該請求,直到有一個物件處理它為止。

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

UML結構圖:

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

一個責任鏈模式範例 
*此例子是三類售貨員處理訂單的情況 
*如果訂單金額小於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(); 
  } 
}

責任鏈模式適用場景


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

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

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

更多詳解C++設計模式程式設計中責任鏈模式的應用相關文章請關注PHP中文網!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn