Skip to content

Instantly share code, notes, and snippets.

@kolosovpetro
Last active April 4, 2021 21:23
Show Gist options
  • Save kolosovpetro/3dc68f7da3f5995507956cda7f5d36c4 to your computer and use it in GitHub Desktop.
Save kolosovpetro/3dc68f7da3f5995507956cda7f5d36c4 to your computer and use it in GitHub Desktop.
Chain
using System;
namespace Chain
{
internal static class Program
{
private static void Main()
{
var ch = new ChildHairdresser();
var wm = new WomenHairDresser();
var mn = new MenHairDresser();
var shop = new Shop(ch);
shop.Add(wm);
shop.Add(mn);
shop.Handle(10);
shop.Handle(20);
shop.Handle(30);
}
}
class Shop
{
private readonly IHairdresser _hairdresser;
private IHairdresser _last;
public Shop(IHairdresser hairdresser)
{
_hairdresser = hairdresser;
_last = _hairdresser;
}
public void Add(IHairdresser hairdresser)
{
_last.SetNext(hairdresser);
_last = _last.Next;
}
public void Handle(int value)
{
_hairdresser.Handle(value);
}
}
public interface IHairdresser
{
IHairdresser Next { get; }
void Handle(int value);
void SetNext(IHairdresser hairdresser);
}
public class ChildHairdresser : IHairdresser
{
public IHairdresser Next { get; private set; }
public void Handle(int value)
{
if (value > 0 && value <= 10)
{
Console.WriteLine("Child hair dresser invoked");
return;
}
Next?.Handle(value);
}
public void SetNext(IHairdresser hairdresser)
{
Next = hairdresser;
}
}
public class WomenHairDresser : IHairdresser
{
public IHairdresser Next { get; private set; }
public void Handle(int value)
{
if (value > 10 && value <= 20)
{
Console.WriteLine("Women hair dresser invoked");
return;
}
Next?.Handle(value);
}
public void SetNext(IHairdresser hairdresser)
{
Next = hairdresser;
}
}
public class MenHairDresser : IHairdresser
{
public IHairdresser Next { get; private set; }
public void Handle(int value)
{
if (value > 20 && value <= 30)
{
Console.WriteLine("Men hair dresser invoked");
return;
}
Next?.Handle(value);
}
public void SetNext(IHairdresser hairdresser)
{
Next = hairdresser;
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment