国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C++ > 正文

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

2020-05-23 14:06:48
字體:
來源:轉載
供稿:網友
這篇文章主要介紹了C++設計模式編程中責任鏈模式的應用,責任鏈模式使多個對象都有機會處理請求,從而避免請求的發送者和接收者之間的耦合關系,需要的朋友可以參考下
 

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

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

責任鏈模式適用場景

  • 有多個的對象可以處理一個請求,哪個對象處理該請求運行時刻自動確定。
  • 你想在不明確指定接收者的情況下,向多個對象中的一個提交一個請求。
  • 可處理一個請求的對象集合應被動態指定。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 陆丰市| 施秉县| 菏泽市| 大荔县| 托里县| 天等县| 四川省| 托里县| 沛县| 礼泉县| 临城县| 兰州市| 秦皇岛市| 砚山县| 穆棱市| 济阳县| 赤城县| 绥棱县| 宜兴市| 仪征市| 崇义县| 南溪县| 拉孜县| 日喀则市| 澄江县| 绥阳县| 南宁市| 五台县| 东源县| 锡林浩特市| 赤壁市| 鸡西市| 云南省| 朝阳县| 凤凰县| 苍梧县| 临武县| 梁平县| 临沭县| 仙居县| 乐至县|