Skip to content

Instantly share code, notes, and snippets.

@yemrekeskin
Last active December 21, 2015 08:39
Show Gist options
  • Save yemrekeskin/6280044 to your computer and use it in GitHub Desktop.
Save yemrekeskin/6280044 to your computer and use it in GitHub Desktop.
Chain Of Reponsibility Design Pattern's implementation classic example
/// <summary>
/// The 'Handler' abstract class or interface
/// </summary>
public abstract class BaseHandler
{
protected BaseHandler successor;
public void SetSuccessor(BaseHandler successor)
{
this.successor = successor;
}
public abstract void ExecuteRequest(int request);
}
/// <summary>
/// The 'ConcreteHandler1' class
/// </summary>
public class ConcreteHandler1
: BaseHandler
{
public override void ExecuteRequest(int request)
{
// Controls,operations
if (successor != null)
successor.ExecuteRequest(request);
}
}
/// <summary>
/// The 'ConcreteHandler2' class
/// </summary>
public class ConcreteHandler2
: BaseHandler
{
public override void ExecuteRequest(int request)
{
// Controls,operations
if (successor != null)
successor.ExecuteRequest(request);
}
}
/// <summary>
/// The 'ConcreteHandler3' class
/// </summary>
public class ConcreteHandler3
: BaseHandler
{
public override void ExecuteRequest(int request)
{
// Controls,operations
if (successor != null)
successor.ExecuteRequest(request);
}
}
//using
class Program
{
static void Main(string[] args)
{
// Setup Chain of Responsibility
BaseHandler h1 = new ConcreteHandler1();
BaseHandler h2 = new ConcreteHandler2();
BaseHandler h3 = new ConcreteHandler3();
h1.SetSuccessor(h2);
h2.SetSuccessor(h3);
h1.ExecuteRequest(10);
h2.ExecuteRequest(21);
Console.ReadLine();
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment