设计模式之责任链模式
作为一个产品正在喝茶聊天,突然一个业务来电,小王啊,我们想做个“操作系统”,小王一听还想做操作系统,现在OA系统都没有做好呢,怎么不做个火箭呢,瞬间一亿个xxx飘过。寒暄几句,自己决定不了,上报了直属领导小张。小张一听这么大的事情,自己也决定不了,他又上报了自己的领导孙部长。孙部长一看来大活了,拍板定了。一个未来的操作系统“孙豆思"就这么定下来了。
上面就是一个责任链模式,我们来看看定义:
责任链模式:使多个对象都有机会处理请求,从而避免了请求的发送者和接受者之间的耦合关系,将这些对象连成一条链,并沿着这条链传递该请求,知道有对象处理它为止。
通用的类图如下:
通用的类图
责任链模式涉及到的角色如下所示:
1、抽象处理者(Handler)角色:定义出一个处理请求的接口。这个角色通常由一个Java抽象类或者Java接口实现。上图中Handler类的聚合关系给出了具体子类对下家的引用,抽象方法handleRequest()规范了子类处理请求的操作。
2、具体处理者(ConcreteHandler)角色:具体处理者接到请求后,可以选择将请求处理掉,或者将请求传给下家。由于具体处理者持有对下家的引用。
通用的伪代码如下,仔细品一品,还是很有味道的,呵呵
责任链模式的通用代码
责任链模式的优缺点:
1、优点:请求和处理分开,两者解耦,提供系统的灵活性。
2、缺点:性能能问,一个链非常长的时候,非常耗时。因为我们避免建立很长的链。
领取专属 10元无门槛券
私享最新 技术干货