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

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

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

2020-01-26 14:41:03
字體:
來源:轉載
供稿:網友

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

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

UML結構圖:

201631591035289.jpg (594×292)

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

責任鏈模式適用場景

  • 有多個的對象可以處理一個請求,哪個對象處理該請求運行時刻自動確定。
  • 你想在不明確指定接收者的情況下,向多個對象中的一個提交一個請求。
  • 可處理一個請求的對象集合應被動態指定。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 阳曲县| 米脂县| 宣汉县| 鄯善县| 华池县| 平武县| 安泽县| 阿克陶县| 封开县| 江都市| 宽城| 海南省| 亚东县| 阿图什市| 富民县| 德阳市| 常德市| 政和县| 棋牌| 普安县| 大石桥市| 静乐县| 广州市| 淮南市| 璧山县| 呼图壁县| 内黄县| 和硕县| 浙江省| 怀宁县| 苍山县| 营山县| 田林县| 宜阳县| 嘉定区| 临猗县| 外汇| 万源市| 舒兰市| 泸州市| 读书|