Skip to content

Instantly share code, notes, and snippets.

@miteshsureja
Created March 13, 2017 05:44
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save miteshsureja/86dc8742c2f23e17e397fa82ee40c2c5 to your computer and use it in GitHub Desktop.
Save miteshsureja/86dc8742c2f23e17e397fa82ee40c2c5 to your computer and use it in GitHub Desktop.
Chain of Responsibility design pattern example
namespace ChainOfResponsibility
{
//Handler class
public abstract class Approver
{
public abstract void HandleRequest(int requestAmount);
protected Approver NextApprover;
public void SetNextApprover(Approver approver)
{
NextApprover = approver;
}
}
}
using System;
namespace ChainOfResponsibility
{
//Concrete Handler class
public class Director : Approver
{
public override void HandleRequest(int requestAmount)
{
if (requestAmount < 300000)
Console.WriteLine("Director has approved amount - {0}", requestAmount);
else if (NextApprover != null)
NextApprover.HandleRequest(requestAmount);
}
}
}
using System;
namespace ChainOfResponsibility
{
//Concrete Handler class
public class Manager : Approver
{
public override void HandleRequest(int requestAmount)
{
if (requestAmount < 100000)
Console.WriteLine("Manager has approved amount - {0}", requestAmount);
else if (NextApprover != null)
NextApprover.HandleRequest(requestAmount);
}
}
}
using System;
namespace ChainOfResponsibility
{
class Program
{
//Client Class
static void Main(string[] args)
{
//Create classes of chain of responsibility
Approver Manager = new Manager();
Approver SeniorManager = new SeniorManager();
Approver Director = new Director();
//Set next request approver or handler
Manager.SetNextApprover(SeniorManager);
SeniorManager.SetNextApprover(Director);
//Create requests.
Manager.HandleRequest(75000);
Manager.HandleRequest(150000);
Manager.HandleRequest(250000);
Console.ReadLine();
}
}
}
using System;
namespace ChainOfResponsibility
{
//Concrete Handler class
public class SeniorManager : Approver
{
public override void HandleRequest(int requestAmount)
{
if (requestAmount < 200000)
Console.WriteLine("Senior Manager has approved amount - {0}", requestAmount);
else if (NextApprover != null)
NextApprover.HandleRequest(requestAmount);
}
}
}
@miteshsureja
Copy link
Author

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment