public static void Main()
for(var i = 0; i < 30; i++){
public interface IHandler{
IHandler Handler { get;set; }
void SetSuccessor(IHandler handler);
void CheckItem(int itemToCheck);
public class Handler1 : IHandler{
public IHandler Handler { get;set; }
public void SetSuccessor(IHandler handler){
public void CheckItem(int itemToCheck){
Console.WriteLine("Handler 1: " + itemToCheck);
else if (Handler != null)
Handler.CheckItem(itemToCheck);
public class Handler2 : IHandler{
public IHandler Handler { get;set; }
public void SetSuccessor(IHandler handler){
public void CheckItem(int itemToCheck){
Console.WriteLine("Handler 2: " + itemToCheck);
else if (Handler != null)
Handler.CheckItem(itemToCheck);
public class Handler3 : IHandler{
public IHandler Handler { get;set; }
public void SetSuccessor(IHandler handler){
public void CheckItem(int itemToCheck){
Console.WriteLine("Handler 3: " + itemToCheck);
else if (Handler != null)
Handler.CheckItem(itemToCheck);