设计模式之责任链模式

目录

概念:

优点:

缺点:

案例应用:

UML图

代码:


本文参考:《大话设计模式》——程杰

责任链模式 ChainOfResponsibility

 

概念:

使多个请求都机会能处理请求,减少 请求发送者 与 接受者 的耦合。处理请求的对象连成一条链并传递请求,直到有一个对象处理它为止。

 

优点:

降低耦合

随时增加或者修改请求

增强对象指派责任的灵活性

 

缺点:

请求不一定被处理。

 

案例应用:

工作流的申请,需要不同权限的领导批准

 

UML图

UML图

代码:

abstract class Manager {
    private Manager superior;
    private String name;

    public  Manager(String name) {
        this.name = name;
    }

    public Manager() {
    }

    public Manager getSuperior() {
        return superior;
    }

    //核心--设置上级
    public void setSuperior(Manager superior) {
        this.superior = superior;
    }
    //请求处理
    abstract public void RequestApplications(Request request);
}

_______________________________________________________________________________

//majordomo总监,其余管理类似,只是判断条件不同
public class Majordomo extends Manager {
    private String name;

    public  Majordomo(String name) {
        super();
        this.name = name;
    }

    @Override
    public void RequestApplications(Request request) {
        if("请假" == request.RequestType && request.Number <= 5){
            System.out.println( request.RequestContent  + request.RequestType +  request.Number + "被"+ name +"批准");
        }else {
            if(getSuperior() != null) {
                //设置上级,将不能处理的请求传给上级
                getSuperior().RequestApplications(request);
            }
        }
    }
}

_______________________________________________________________________________

public class Main {
    public static void main(String[] args){
        Majordomo majordomo = new Majordomo("主管");
        CommonManager commonManager = new CommonManager("总监");
        GeneralManager generalManager = new GeneralManager("总裁");

        majordomo.setSuperior(commonManager);
        commonManager.setSuperior(generalManager);

        Request request = new Request();
        request.RequestType="请假";
        request.RequestContent="小明";
        request.Number = 4;
        majordomo.RequestApplications(request);

        Request request1 = new Request();
        request1.RequestType="加薪";
        request1.RequestContent="小红";
        request1.Number = 600;
        majordomo.RequestApplications(request1);
    }
}

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值