詳解C++設計形式編程中義務鏈形式的運用。本站提示廣大學習愛好者:(詳解C++設計形式編程中義務鏈形式的運用)文章只能為提供參考,不一定能成為您想要的結果。以下是詳解C++設計形式編程中義務鏈形式的運用正文
職責鏈形式:使多個對象都無機會處置要求,從而防止要求的發送者和吸收者之間的耦合關系。將這些對象連成一條鏈,並沿著這條鏈傳遞該要求,直到有一個對象處置它為止。
其思惟很簡略,好比斟酌員工請求加薪。公司的治理者一共有三級,總司理、總監、司理,假如一個員工請求加薪,應當向主管的司理請求,假如加薪的數目在司理的權柄內,那末司理可以直接同意,不然將請求上交給總監。總監的處置方法也一樣,總司理可以處置一切要求。這就是典范的職責鏈形式,要求的處置構成了一條鏈,直到有一個對象處置要求。給出這個例子的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();
}
}
義務鏈形式實用場景