Mega Code Archive

 
Categories / C# / Design Patterns
 

Chain of Responsibility Pattern

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