国产探花免费观看_亚洲丰满少妇自慰呻吟_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();   } } 

責任鏈模式適用場景

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


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 稻城县| 营山县| 琼结县| 土默特左旗| 常宁市| 恩平市| 卫辉市| 承德县| 华池县| 杭锦后旗| 尼玛县| 宣城市| 都江堰市| 讷河市| 株洲市| 麦盖提县| 平顶山市| 马龙县| 宿迁市| 攀枝花市| 全南县| 嘉黎县| 舒城县| 襄垣县| 朔州市| 锡林浩特市| 齐河县| 汕头市| 丰原市| 龙江县| 余姚市| 汨罗市| 双流县| 咸宁市| 玉林市| 阜阳市| 湄潭县| 桂东县| 石河子市| 通海县| 蒲城县|