设计模式之职责链(Chain of Resposibility) c#
设计模式之职责链(Chain of Resposibility)
Author: 李艳庆 Date: 2005年11月11日
职责链是多个类共同处理一个请求.当A类不能处理时则传递给B类,B类不能处理时传递给C类,依次传下去,直到处理或所有类遍历一次. 也就是说当一个类不能处理一个请求时,就把该请求传给它的下家,下家不能处理,再传给它的下下家. 例如显示某个数值,每个类呢,都有一个显示范围,判断是否在这个范围内,在则显示,不在就传给它的下家. 建立一个抽象的处理类.所有处理类继承于它. public abstract class ShowNumber { protected ShowNumber show; public void SetNextHandler(ShowNumber show) { this.show = show; } public abstract void ShowRequest(int number); } 下面为四个简单的处理类: public class ShowNumber1 : ShowNumber { public override void ShowRequest(int number) { if ((number >= 0) && (number < 250)) { Console.WriteLine(number.ToString()); } else if(show != null) { show.ShowRequest(number); } } } public class ShowNumber2 : ShowNumber { public override void ShowRequest(int number) { if ((number >= 250) && (number < 500)) { Console.WriteLine(number.ToString()); } else if(show != null) { show.ShowRequest(number); } } } public class ShowNumber3 : ShowNumber { public override void ShowRequest(int number) { if ((number >= 500) && (number < 750)) { Console.WriteLine(number.ToString()); } else if(show != null) { show.ShowRequest(number); } } } public class ShowNumber4 : ShowNumber { public override void ShowRequest(int number) { if ((number >= 750) && (number < 1000)) { Console.WriteLine(number.ToString()); } else if(show != null) { show.ShowRequest(number); } } }
调用时,依次将处理类联结.最后由第一个处理类处理. public class Client { public static void Main() { ShowNumber show1 = new ShowNumber1(); ShowNumber show2 = new ShowNumber2(); ShowNumber show3 = new ShowNumber3(); ShowNumber show4 = new ShowNumber4(); show1.SetNextHandler(show2); show2.SetNextHandler(show3); show3.SetNextHandler(show4); show1.ShowRequest(300); } }
当第一个处理类不能处理时,会传给第二个处理类,第二个处理类可以处理
|
|