设计模式------职责链模式

一、 定义
职责链模式(Chain of Responsibility),使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这个对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它。
优点:
二、 结构图

在这里插入图片描述

在这里插入图片描述

三、 示例代码(以公司的请假审批流程为例)

package org.example.chainofresponsibilitiy;

public abstract class Manager {

    public abstract void HandleMessage(Request request);
    public abstract void SetSuperManager(Manager manager);
}

package org.example.chainofresponsibilitiy;

public class CommonManager extends Manager {

    private Manager manager;
    private String name="";
    CommonManager(String name){
        this.name = name;
    }

    @Override
    public void HandleMessage(Request request) {
        if (request.getValue() < 20){
            System.out.println(this.name + " 批准了请假");
        }
        else{
            manager.HandleMessage(request);
        }
    }

    @Override
    public void SetSuperManager(Manager manager) {
       this.manager = manager;
    }
}


package org.example.chainofresponsibilitiy;

public class ChiefManager extends Manager {

    private Manager manager;
    private String name="";
    ChiefManager(String name){
        this.name = name;
    }

    @Override
    public void HandleMessage(Request request) {
        if (request.getValue()>20 && request.getValue()<50){
            System.out.println(this.name + " 批准了请假");
        }
        else {
            manager.HandleMessage(request);
        }
    }

    @Override
    public void SetSuperManager(Manager manager) {
            this.manager = manager;
    }
}


package org.example.chainofresponsibilitiy;

public class GeneralManager extends Manager {

    private Manager manager;
    private String name = "";

    GeneralManager(String name){
        this.name = name;
    }
    @Override
    public void HandleMessage(Request request) {
        if (request.getValue()>50 && request.getValue() < 100)
        {
            System.out.println(this.name + " 批准了请假");
        }
        else if (request.getValue() > 100)
        {
            System.out.println(this.name + " 同意了涨薪");
        }
        else {
            manager.HandleMessage(request);
        }
    }

    @Override
    public void SetSuperManager(Manager manager) {
        this.manager = manager;
    }
}



package org.example.chainofresponsibilitiy;

public class Request {

    private String reType = "";
    private int value = 0;


    public String getReType() {
        return reType;
    }

    public void setReType(String reType) {
        this.reType = reType;
    }


    public int getValue() {
        return value;
    }

    public void setValue(int value) {
        this.value = value;
    }
}


package org.example.chainofresponsibilitiy;

public class ChainofresponsibilitiyTest {
    public static void main(String[] args) {
        CommonManager cm = new CommonManager("wang");
        ChiefManager cfm = new ChiefManager("li");
        GeneralManager gm = new GeneralManager("zhang");

        cm.SetSuperManager(cfm);
        cfm.SetSuperManager(gm);

        Request request = new Request();
        request.setValue(15);
        cm.HandleMessage(request);

        request.setValue(55);
        cm.HandleMessage(request);

        request.setValue(120);
        cm.HandleMessage(request);
//        Request request1 = new Request();
//        request1.setValue(55);
//        cm.HandleMessage(request1);
    }
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值