Csharp/C Sharp/Design Patterns/Chain Pattern

Материал из .Net Framework эксперт
Перейти к: навигация, поиск

Chain of Responsibility Pattern

<source lang="csharp"> using System; public abstract class Chain {

   protected Chain theNextInChain;
   public abstract void DealWithRequirement(string requirement);
   public void NextInChain(Chain next) {
       this.theNextInChain = next;
   }

} public class Employee : Chain {

   public override void DealWithRequirement(string requirement) {
       switch (requirement) {
           case "Job":
               Console.WriteLine("{0} Staff", this);
               break;
           default:
               if (theNextInChain != null)
                   theNextInChain.DealWithRequirement(requirement);
               break;
       }
   }

}

public class Manager : Chain {

   public override void DealWithRequirement(string requirement) {
       switch (requirement) {
           case "Manager":
               Console.WriteLine("{0} requirement.", this);
               break;
           default:
               if (theNextInChain != null)
                   theNextInChain.DealWithRequirement(requirement);
               break;
       }
   }

}

public class Senior : Chain {

   public override void DealWithRequirement(string requirement) {
       switch (requirement) {
           default: Console.WriteLine("{0} has managed the " + requirement + " requirement.", this);
               break;
       }
   }
   public Senior() { ;}

} class Client {

   static void Main(string[] args) {
       Chain staff = new Employee();
       Chain manager = new Manager();
       Chain seniorManager = new Senior();
       staff.NextInChain(manager);
       manager.NextInChain(seniorManager);
       staff.DealWithRequirement("Corporates");
       staff.DealWithRequirement("Job");
       staff.DealWithRequirement("Manager");
       staff.DealWithRequirement("Agency");
   }

}

</source>