Maison >développement back-end >Tutoriel C#.Net >Explication détaillée de l'application du modèle de chaîne de responsabilité dans la programmation du modèle de conception C

Explication détaillée de l'application du modèle de chaîne de responsabilité dans la programmation du modèle de conception C

高洛峰
高洛峰original
2017-01-19 17:01:361413parcourir

Modèle de chaîne de responsabilité : permet à plusieurs objets d'avoir la possibilité de gérer les demandes, évitant ainsi la relation de couplage entre l'expéditeur et le destinataire de la demande. Ces objets sont connectés dans une chaîne et la requête est transmise le long de la chaîne jusqu'à ce qu'un objet la gère.

L’idée est très simple, comme considérer la demande d’augmentation de salaire des salariés. Il existe trois niveaux de managers dans l'entreprise : directeur général, directeur et manager. Si un employé demande une augmentation de salaire, il doit s'adresser au manager responsable. Si le montant de l'augmentation de salaire relève de l'autorité du manager, le manager peut le faire. l’approuver directement, sinon la demande sera soumise au directeur. Il en va de même pour le Directeur, le Directeur Général peut traiter toutes les demandes. Il s'agit d'un modèle typique de chaîne de responsabilité. Le traitement des demandes forme une chaîne jusqu'à ce qu'un objet traite la demande. Un diagramme UML est donné pour cet exemple.

Schéma de structure UML :

详解C  设计模式编程中责任链模式的应用

Un exemple de modèle de chaîne de responsabilité
*Cet exemple est la situation de trois types de vendeurs traitant les commandes
*Si la commande Si le montant est inférieur à 1000, le vendeur de premier niveau peut traiter la commande
* Si le montant de la commande est inférieur à 10000, le vendeur de deuxième niveau peut traiter la commande
* Si le le montant de la commande est inférieur à 100 000, le vendeur de troisième niveau peut traiter la commande

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(); 
  } 
}

Scénarios applicables du modèle de chaîne de responsabilité

Il existe plusieurs objets qui peuvent traiter une demande , et l'objet qui gère la requête est automatiquement déterminé au moment de l'exécution.

Vous souhaitez soumettre une demande à l'un des multiples objets sans spécifier explicitement le destinataire.

La collection d'objets pouvant gérer une requête doit être spécifiée dynamiquement.

Pour des explications plus détaillées sur l'application du modèle de chaîne de responsabilité dans la programmation de modèles de conception C, veuillez faire attention au site Web PHP chinois !

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn