设计模式学习笔记之职责链模式

今天开始打算将设计模式相关的内容进行一下梳理,同时将一些Demo记录于此。

在开始今天的学习笔记之前,我想先讲这样一个故事:某公司到了一年一度调薪的日子,对于调薪的受理由不同的职位的领导进行处理。部门经理可以直接受理1000以内的调薪,总经理可以直接受理2000以内的调薪,董事长可以受理5000以内的调薪。目前,有三位童鞋申请调薪,他们分别是 Kaisir:3000 , Zhang:5000 , liu:1500 , X-Man:10000,如果使用程序编写,我们该如何处理这种情况呢?

在这种情况下,我们的请求沿着 “部门经理 -> 总经理 -> 董事长” 的顺序依次传递,每一级受理他们权限之内的请求,若超出权限,则继续向上级申请。除了调薪之外,请假,调薪也跟此情景类似,于是对于此种情景,我们可以使用职责链模式进行处理。

任何事物都有正反两面,这个职责链模式的优缺点在哪里呢?
优点:链上的每个节点都是彼此独立的,节点无需知道整个链条的内容,只需要知道他的后继节点即可,这样很大程度降低了类与类之间的耦合关系。此外可以很自由的增加新的处理节点,无需修改之前的节点,符合开放-封闭原则。

缺点:除目标链之外,其他的节点仅仅起到传递的作用,若链过长的话,系统将被传递用的节点占掉很多的资源。

具体事例代码如下:
抽象类 Manager

[java]

package com.kaisir.designpattern.chain;

import com.kaisir.designpattern.chain.model.Request;

/**
* Created with IntelliJ IDEA.
* User: Kaisir
* Date: 13-3-23
* Time: 下午2:32
* To change this template use File | Settings | File Templates.
*/
public abstract class Manager {
private Manager nextchain;

public Manager getNextchain() {
return nextchain;
}

public void setNextchain(Manager nextchain) {
this.nextchain = nextchain;
}

public abstract void doRequest(Request request);
}

[/java]

继续阅读“设计模式学习笔记之职责链模式”