风动破

导航

设计模式之责任链chain of responsibility

这个解决方案就是CoR, 在一个链上,都有相应职责的类,因此叫Chain of Responsibility. 
CoR的优点: 
因为无法预知来自外界(客户端)的请求是属于哪种类型,
每个类如果碰到它不能处理的请求只要放弃就可以。 
缺点:
效率低,因为一个请求的完成可能要遍历到最后才可能完成,当然也可以用树的概念优化。
与Command模式区别:
 Command 模式需要事先协商客户端和服务器端的调用关系,比如 1 代表 start 2 代表 move 等,这些 都是封装在 request 中,到达服务器端再分解。 
 CoR 模式就无需这种事先约定,服务器端可以使用 CoR 模式进行客户端请求的猜测,一个个猜测 试验
    public interface RequestHandle { 
        public void requestHandle(Request request);
    }
    public class Request{
        private string request;
        public Request(string request){
            this.request = request;
        }
        public string getType(){
            return request;
        }
        /// <summary>
        /// 执行语句
        /// </summary>
        public virtual void Execute() { }
    }
    public class HelpHandle : Request {
        public override void Execute()
        {
            base.Execute();
        }
    }
    public class ConcreteHandle:RequestHandle
    {
        private RequestHandle handle;
        public ConcreteHandle(RequestHandle handle) 
        {
            this.handle = handle;
        }
        public void requestHandle(Request request)
        {
            if (request is HelpHandle)
            {
                request.Execute();
            }
            else {
                handle.requestHandle(request);
            }
        }
    }

posted on 2015-04-28 15:06  风动破  阅读(100)  评论(0)    收藏  举报