.NET开发

本类阅读TOP10

·NHibernate快速指南(翻译)
·vs.net 2005中文版下载地址收藏
·【小技巧】一个判断session是否过期的小技巧
·VB/ASP 调用 SQL Server 的存储过程
·?dos下编译.net程序找不到csc.exe文件
·通过Web Services上传和下载文件
·学习笔记(补)《.NET框架程序设计(修订版)》--目录
·VB.NET实现DirectDraw9 (2) 动画
·VB.NET实现DirectDraw9 (1) 托管的DDraw
·建站框架规范书之——文件命名

分类导航
VC语言Delphi
VB语言ASP
PerlJava
Script数据库
其他语言游戏开发
文件格式网站制作
软件工程.NET开发
通讯兵(Chain of Responsibility)

作者:未知 来源:月光软件站 加入时间:2005-2-28 月光软件站

 

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

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

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

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

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

处理函数.当然我们没必要那么些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;
        }
    }
}




相关文章

相关软件