Mega Code Archive

 
Categories / C# Tutorial / Design Patterns
 

Chain Of Responsibility

using System;   public abstract class Job   {     protected Job nextJob;     public abstract void DealWithRequirement(string requirement);     public void NextInChain(Job next)     {       this.nextJob = next;     }        }   public class ProgrammerJob: Job   {     public override void DealWithRequirement(string requirement)     {       switch (requirement)       {         case "Code":           Console.WriteLine ("{0} has managed the code." ,this);           break;         default:           if (nextJob != null)             nextJob.DealWithRequirement(requirement);           break;       }                    }          public ProgrammerJob(){;}   }   public class Requirement   {     public Requirement()     {     }   }   public class SeniorProgrammerJob: Job   {     public override void DealWithRequirement(string requirement)     {       switch (requirement)       {         default:           Console.WriteLine("{0} has managed the " + requirement + " requirement." ,this);            break;       }     }     public SeniorProgrammerJob(){;}   }   public class StaffJob: Job   {     public override void DealWithRequirement(string requirement)     {       switch (requirement)       {         case "Test":           Console.WriteLine ("{0} has managed the test." ,this);           break;         default:           if (nextJob != null)             nextJob.DealWithRequirement(requirement);           break;       }                    }     public StaffJob(){;}   }   class Client   {     static void Main(string[] args)     {       Job staff = new StaffJob();       Job manager = new ProgrammerJob();       Job seniorProgrammer = new SeniorProgrammerJob();              staff.NextInChain(manager);       manager.NextInChain(seniorProgrammer);       staff.DealWithRequirement("Plan");       staff.DealWithRequirement("Test");       staff.DealWithRequirement("Code");       staff.DealWithRequirement("Deploy");     }   }