责任链模式

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);

}

}

}

你可能感兴趣的:(责任链模式)