Csharp/CSharp Tutorial/Design Patterns/Chain Responsibility
Chain Of Responsibility
<source lang="csharp">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"); } }</source>