通讯兵(Chain of Responsibility)

王朝other·作者佚名  2006-01-08
宽屏版  字体: |||超大  

如果看英文名字的话你可能会想到责任链.其定义为使多个对象都有机会处理

请求,从而避免请求的发送者和接收者之间的耦合关系。将这些对象连成一条链,

并沿着这条链传递该请求,直到有一个对象处理它为止。那么可能会误解.

其实这个模式很类似消息通讯.也就好象是在对应的消息函数.至少我看完这个

模式首先想到的就是这个.的确也是十分象.你甚至也可以构造一个句柄来判断消息

处理函数.当然我们没必要那么些select ...case ....那不方便.而且

要适合面向对象原则.其实这很灵活可以想到的代码方案很多.单必须考虑

1.要适合扩充.2.要调用方便.下面是我提供的一组解决方案

假设.一个家长对他的孩子有一下消息"吃饭" "睡觉" "读书",吃饭必须要在

餐厅.睡觉在卧室.读书在图书管

//构造消息句柄

public interface IHandler{

//string HandlerName{get;}

void Request();

}

//事件

public class DiningHandler : IHandler{

public void Request(){

Console.WriteLine("吃饭");

}

}

public class RestHandler : IHandler{

public void Request(){

Console.WriteLine("睡觉");

}

}

public class ReadHandler : IHandler{

public void Request(){

Console.WriteLine("读书");

}

}

//事件管理者

public class ManagerHandler {

public IHandler source;//事件源

public ManagerHandler(IHandler s){

this.source=s;

}

public void Execute(IRequest request){

request.Execute(this.source);//有实际的处理器来执行

}

}

//处理器

public interface IRequest{

void Execute (Ihandler source);

}

public class myRequest : IRequest{

public void Execute (Ihandler source){

source.Request();

}

}

//客户调用

public class Client

{

public static int Main(string[] args)

{

IHandler Dining=new DiningHanlder();

IHandler Rest=new RestHandler();

IHandler Read=new ReadHandler();

MangerHandler mh=new MangerHandler(Rest);

IRequest mr=new myRequest();

mh.Execute(mr);

mh.source=Dining;

mh.Execute(mr);

return 0;

}

}

}

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
© 2005- 王朝网络 版权所有