如果看英文名字的话你可能会想到责任链.其定义为使多个对象都有机会处理
请求,从而避免请求的发送者和接收者之间的耦合关系。将这些对象连成一条链,
并沿着这条链传递该请求,直到有一个对象处理它为止。那么可能会误解.
其实这个模式很类似消息通讯.也就好象是在对应的消息函数.至少我看完这个
模式首先想到的就是这个.的确也是十分象.你甚至也可以构造一个句柄来判断消息
处理函数.当然我们没必要那么些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; } } }

|