您的位置:首页 > 大数据 > 人工智能

设计模式学习17 Chain Of Responsibility

2010-07-23 20:47 585 查看

应用场景:

Chain the receiving objects and pass the request along the chain until an object handles it.

实现代码:

class Request
{

}

abstract class BaseHandler
{
public BaseHandler(BaseHandler next)
{
this.next = next;
}
// 下一个可能处理这个request的对象
// 这里相当于链表
private BaseHandler next;
public BaseHandler Next
{
get
{
return this.next;
}
set
{
this.next = value;
}
}

public abstract bool CanHandleRequest(Request request);
// 默认的情况把请求转到下一个对象去处理
public virtual void HandleRequest(Request reqest)
{
if(this.next != null)
{
this.next.HandleRequest(reqest);
}
}
}

public class AHandler : BaseHandler
{
public AHandler(BaseHandler next) : base(next)
{

}

public override bool CanHandleRequest(Request request)
{
return true;
}

public override void HandleRequest(Request request)
{
if (this.CanHandleRequest(request))
{
// ...
}
else
{
base.HandleRequest(request);
}
}
}

public class BHandler : BaseHandler
{
public BHandler(BaseHandler next) : base(next)
{

}

public override void HandleRequest(Request reqest)
{
throw new NotImplementedException();
}
}

public class CHandler : BaseHandler
{
public CHandler(BaseHandler next) : base(next)
{

}

public override void HandleRequest(Request reqest)
{
throw new NotImplementedException();
}
}

class Sender
{
public void Process()
{
// 请求的处理者来负责请求处理
Request request = new Request();

BaseHandler aHandler = new AHandler(null);
BaseHandler bHandler = new BHandler(aHandler);
BaseHandler cHandler = new CHandler(bHandler);

cHandler.HandleRequest(request);
// requst赋值等工作

// arraylist需要客户来维护
ArrayList list = new ArrayList();

list.Add(new AHandler());
list.Add(new BHandler());
list.Add(new CHandler());

foreach (BaseHandler handler in list)
{
if (handler.CanHandleRequest(request))
handler.HandleRequest(request);
}
}
}

class Program
{
static void Main(string[] args)
{
Sender sender = new Sender();

sender.Process();
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: