using System;
namespace MyApp
{
class Program
{
static void Main()
{
Question question = new Question(Severity.high);
FirstHander firstHander = new FirstHander();
firstHander.Handle(question);
Console.ReadKey();
}
}
enum Severity : int
{
serious=0,
high=1,
normal=2,
low=3
}
class Question
{
public Severity severity { get; set; }
public Question(Severity severity)
{
this.severity = severity;
}
}
abstract class Handler
{
protected Handler nextHander;
public Handler(Handler nextHander = null)
{
this.nextHander = nextHander;
}
public abstract void Handle(Question question);
protected void HandleTemplate(Question question,string handerName,Severity handerSeverity)
{
if (question.severity >= handerSeverity)
{
Console.WriteLine("Severity:{0}", question.severity);
Console.WriteLine("Resolved:{0}", handerName);
Console.WriteLine();
}
else
{
if (nextHander != null)
{
nextHander.Handle(question);
}
}
}
}
class FinalHander : Handler
{
public FinalHander()
: base()
{ }
public override void Handle(Question question)
{
HandleTemplate(question, "FinalHander", Severity.serious);
}
}
class ThirdHander : Handler
{
public ThirdHander()
: base(new FinalHander())
{ }
public override void Handle(Question question)
{
HandleTemplate(question, "ThirdHander", Severity.high);
}
}
class SecondHander : Handler
{
public SecondHander()
: base(new ThirdHander())
{ }
public override void Handle(Question question)
{
HandleTemplate(question, "SecondHander", Severity.normal);
}
}
class FirstHander : Handler
{
public FirstHander()
: base(new SecondHander())
{ }
public override void Handle(Question question)
{
HandleTemplate(question, "FirstHander", Severity.low);
}
}
}