设计思想学习—职责链模式

职责链模式

职责链模式(Chain of Responsibility):使多个对象都有机会处理求情,从而避免求情的发送者和接受者之间的耦合关系。将这个对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理他为止。

职责链也是一个很简单的模式,就像糖葫芦一样穿成一串一个个来,而且组成也很简单就两部分

职责链模式构成:

  • 抽象处理者(Handler)角色:定义出一个处理请求的接口。

  • 具体处理者(ConcreteHandler)角色:具体处理者接到请求后,可以选择将请求处理掉,或者将请求传给下家。由于具体处理者持有对下家的引用,因此,如果需要,具体处理者可以访问下家。

UML
这里写图片描述

因为很容易理解所以就没有研究太多,直接上代码

abstract class Handler {   
    //持有后继的责任对象
    protected Handler successor;
    //示意处理请求的方法
    public abstract void handleRequest(int num);
    //赋值方法,设置后继的责任对象
    public abstract void setSuccessor(Handler successor);
}
class ConcreteHandler extends Handler {
    private Handler successor;
    //处理方法,调用此方法处理请求
    @Override
    public void handleRequest(int num) {
        //判断是否在处理范围之内
        if(num == 1){            
            System.out.println("第一级:处理请求");         
        }else{ 
            System.out.println("交给二级处理");
            if(successor!=null){
                successor.handleRequest(num);    
            }              
        }
    }
    @Override
    public void setSuccessor(Handler successor) {
        this.successor=successor;
    }
}
class ConcreteHandler2 extends Handler {
    private Handler successor;
    //处理方法,调用此方法处理请求
    @Override
    public void handleRequest(int num) {
        //判断是否在处理范围之内
        if(num == 2){            
            System.out.println("第二级:处理请求");         
        }else{ 
            System.out.println("交给三级处理");
            if(successor!=null){
                successor.handleRequest(num);    
            }          
        }
    }
    @Override
    public void setSuccessor(Handler successor) {
        this.successor=successor;
    }
}
public class Client {
    public static void main(String[] args) {
        ConcreteHandler one=new ConcreteHandler();
        ConcreteHandler2 two=new ConcreteHandler2();
        one.setSuccessor(two);
        one.handleRequest(2);
    }
}

输出:
交给二级处理
第二级:处理请求

为了省事儿,这里只弄了两级,现实中有几级可以弄几级直到处理为止。

其实所有的设计模式都没有研究很深,因为目标只是认识知道,往后会慢慢加深印象理解。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值