设计模式-行为型模式-责任链模式

简介:

设计模式-行为型模式-责任链模式

定义

将请求沿着链传递,然后直到对象处理即可。

UML图

代码

基本的责任链

public class Test{
    public void test(int i, Request request){
        if(i == 1){
            Hander1.response(request);
        }
        
        if(i == 2){
            Hander2.response(request);
        }
        
        if(i == 3){
            Hander3.requese(request);
        }
    }
}

代码逻辑如上,只处理1,2,3情况,其余的情况都不处理。

责任链

// 对象
public class Level{
    private int level = 0;
    public Level(int level){
        this.level = level;
    }
    public boolean above(Level level){
        if(this.level >= level.level)
            return true;
        else
            return false;
    }
}

// 将对象进行封装
public class Request{
    Level level;
    public Request(Level level){
        this.level = level;
    }
    public Level getLevel(){
        return level;
    }
}

// 返回消息
public class Response{}

public abstract class Handler{
    private Handler nextHandler;
    public final Response handleRequest(Request request){
        Response response = null;
        // 根据处理器的优先级处理,如果优先级高,处理
        if(this.getHandlerLevel().above(request.getLevel())){
            // 如果寻找到处理器,进行处理
            response = this.response(request);
        }else{
            // 否则,进入下一个处理器
            if(this.nextHandler != null){
                this.nextHandler.handleRequest(request);
            }else{
                System.out.println("没有合适的处理器");
            }
        }
        return response;
    }
    // 设置下一个处理器
    public void setNextHandler(Handler handler){
        this.nextHandler = handler;
    }
    // 当前处理器
    protected abstract Level getHandlerLvel();
    // 进入处理器处理
    public abstract Response response(Request request);
}

// 第一个处理器
public class ConcreteHandler1 extends Handler{
    protected Level getHandlerLevel(){
        return new Level(1);
    }
    public Response response(Request request){
        System.out.println("处理1处理");
        return null;    // 下一个处理器为空
    }
}

// 第二个处理器
public class ConcreteHandler2 extends Handler{
    protected Level getHandlerLevel(){
        return new Level(3);
    }
    public Response response(Request request){
        System.out.println("处理1处理");
        return null;    // 下一个处理器为空
    }
}

// 第三个处理器
public class ConcreteHandler3 extends Handler{
    protected Level getHandlerLevel(){
        return new Level(5);
    }
    public Response response(Request request){
        System.out.println("处理1处理");
        return null;    // 下一个处理器为空
    }
}

// 最后定义场景
public class Client{
    public static void main(String[] args){
        // 新建处理器
        Handler handler1 = new ConcreteHandler1();
        Handler handler2 = new ConcreteHandler2();
        Handler handler3 = new ConcreteHandler3();
        
        // 设置下一个处理器
        // 处理器处理逻辑为先处理1,再处理2,再处理3
        handler1.setNextHandler(handler2);
        handler2.setNextHandler(handler3);
        
        // 进行处理
        Response response = handler1.handlerRequest(new Request(new Level(4)));
    }
}

总结

责任链模式核心在处理流,让对象在类之间流动,直到合适进行对象处理,并把下一个设置为空。
写法,当然就是新建几个处理器类,然后要处理的对象,处理类之间用next指向下一个,然后把处理的对象传入进去,如果找到合适的处理器,进行处理,并将下一个设置为空,完成责任链。
其中,几个处理器类可以抽象出一个抽象类,并把对象进行封装成一个类,以上为上方代码的设计思路。

应用

开发一个电商网站,支付过500元定金的用户,收到100元优惠卷,200元收到50元,没有支付过的,进入普通模式购买。
如果不用职责链,需要写入一大堆if语句。
将if语句拆分,使用职责链,将处理器类抽象出来,然后将购买的用户传入处理器,然后如果处理完成,下一个设置为空,返回结果。
另外一个应用,文件上传,使用的也是职责链。

目录
相关文章
|
25天前
|
存储 设计模式 算法
【23种设计模式·全精解析 | 行为型模式篇】11种行为型模式的结构概述、案例实现、优缺点、扩展对比、使用场景、源码解析
行为型模式用于描述程序在运行时复杂的流程控制,即描述多个类或对象之间怎样相互协作共同完成单个对象都无法单独完成的任务,它涉及算法与对象间职责的分配。行为型模式分为类行为模式和对象行为模式,前者采用继承机制来在类间分派行为,后者采用组合或聚合在对象间分配行为。由于组合关系或聚合关系比继承关系耦合度低,满足“合成复用原则”,所以对象行为模式比类行为模式具有更大的灵活性。 行为型模式分为: • 模板方法模式 • 策略模式 • 命令模式 • 职责链模式 • 状态模式 • 观察者模式 • 中介者模式 • 迭代器模式 • 访问者模式 • 备忘录模式 • 解释器模式
【23种设计模式·全精解析 | 行为型模式篇】11种行为型模式的结构概述、案例实现、优缺点、扩展对比、使用场景、源码解析
|
2月前
|
设计模式 JavaScript Scala
Kotlin - 改良设计模式 - 责任链模式
Kotlin - 改良设计模式 - 责任链模式
49 3
|
3月前
|
设计模式 JavaScript Scala
Kotlin - 改良设计模式 - 责任链模式
Kotlin - 改良设计模式 - 责任链模式
59 9
|
2月前
|
设计模式 JavaScript Scala
Kotlin教程笔记(55) - 改良设计模式 - 责任链模式
Kotlin教程笔记(55) - 改良设计模式 - 责任链模式
29 0
|
2月前
|
设计模式 JavaScript Scala
Kotlin教程笔记(55) - 改良设计模式 - 责任链模式
Kotlin教程笔记(55) - 改良设计模式 - 责任链模式
41 0
|
3月前
|
设计模式 监控 算法
Java设计模式梳理:行为型模式(策略,观察者等)
本文详细介绍了Java设计模式中的行为型模式,包括策略模式、观察者模式、责任链模式、模板方法模式和状态模式。通过具体示例代码,深入浅出地讲解了每种模式的应用场景与实现方式。例如,策略模式通过定义一系列算法让客户端在运行时选择所需算法;观察者模式则让多个观察者对象同时监听某一个主题对象,实现松耦合的消息传递机制。此外,还探讨了这些模式与实际开发中的联系,帮助读者更好地理解和应用设计模式,提升代码质量。
Java设计模式梳理:行为型模式(策略,观察者等)
|
3月前
|
设计模式 JavaScript Scala
Kotlin - 改良设计模式 - 责任链模式
本教程详细讲解了Kotlin语法,适合需要深入了解Kotlin的开发者。对于希望快速上手Kotlin的读者,推荐查阅“简洁”系列教程。本文通过学生会经费申请的例子,介绍了责任链模式及其在Kotlin中的实现,并使用偏函数进行了改进,使代码更加简洁和灵活。
21 0
|
3月前
|
设计模式 JavaScript Scala
Kotlin - 改良设计模式 - 责任链模式
Kotlin - 改良设计模式 - 责任链模式
45 0
|
4月前
|
设计模式 缓存 监控
Java设计模式-责任链模式(17)
Java设计模式-责任链模式(17)
|
3月前
|
设计模式 JavaScript Scala
Kotlin学习笔记 - 改良设计模式 - 责任链模式
Kotlin学习笔记 - 改良设计模式 - 责任链模式
50 0