您当前的位置: 首页 >  Java

小志的博客

暂无认证

  • 0浏览

    0关注

    1217博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

java设计模式——责任链模式

小志的博客 发布时间:2021-01-24 22:29:41 ,浏览量:0

目录
    • 一、责任链模式的定义与类型
    • 二、责任链模式的适用场景
    • 三、责任链模式的优点
    • 四、责任链模式的缺点
    • 五、责任链模式相关设计模式
    • 六、责任链模式示例

一、责任链模式的定义与类型

1、定义

  • 为请求创建一个接收此次请求对象的链

2、类型

  • 行为型
二、责任链模式的适用场景
  • 一个请求的处理需要多个对象当中的一个或几个协作处理
三、责任链模式的优点
  • 请求的发送者和接收者(请求的处理)解耦
  • 责任链可以动态组合
四、责任链模式的缺点
  • 责任链太长或者处理时间过长,影响性能
  • 责任链有可能过多
五、责任链模式相关设计模式
  • 责任链模式和状态模式
六、责任链模式示例

以提交课程的笔记和视频,审批者进行审批为例进行代码演示

1、代码结构如下: 在这里插入图片描述

2、定义一个课程类

package com.rf.designPatterns.behavioral.chainOfResponsibility;

/**
 * @description: 定义一个课程类
 * @author: xz
 */
public class Course {
    private String name;//名称
    private String notes;//笔记
    private String video;//视频

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getNotes() {
        return notes;
    }

    public void setNotes(String notes) {
        this.notes = notes;
    }

    public String getVideo() {
        return video;
    }

    public void setVideo(String video) {
        this.video = video;
    }

    @Override
    public String toString() {
        return "Course{" +
                "name='" + name + '\'' +
                ", notes='" + notes + '\'' +
                ", video='" + video + '\'' +
                '}';
    }
}

3、定义一个审批抽象类

package com.rf.designPatterns.behavioral.chainOfResponsibility;

/**
 * @description: 定义一个审批抽象类
 * @author: xz
 */
public abstract class Approval {
    protected Approval approval;

    //设置下一个审批者
    public void setNextApproval(Approval approval){
        this.approval=approval;
    }

    //发布课程
    public abstract void deploy(Course course);
}

4、定义一个笔记的审批者类

package com.rf.designPatterns.behavioral.chainOfResponsibility;

import org.apache.commons.lang.StringUtils;

/**
 * @description: 定义一个笔记的审批者类
 * @author: xz
 */
public class NotesApproval extends Approval{

    @Override
    public void deploy(Course course) {
        //如果课程的笔记不为空,进行审批
        if(StringUtils.isNotEmpty(course.getNotes())){
            System.out.println("课程名称:"+course.getName()+
                               "包含笔记:"+course.getNotes()+
                               "【审批同意】");
            //因为继承,所以可直接用父类的approval
            //如果审批者不为空,继续发布交给下一个审批者
            if(approval !=null){
                approval.deploy(course);
            }
        }else{
            System.out.println("课程名称:"+course.getName()+
                    "不包含笔记:"+"【审批拒绝】,流程结束。");
            return;
        }
    }
}

5、定义一个视频的审批者类

package com.rf.designPatterns.behavioral.chainOfResponsibility;

import org.apache.commons.lang.StringUtils;

/**
 * @description: 定义一个视频的审批者类
 * @author: xz
 */
public class VideoApproval extends Approval{
    @Override
    public void deploy(Course course) {
        //如果课程的视频不为空,进行审批
        if(StringUtils.isNotEmpty(course.getVideo())){
            System.out.println("课程名称:"+course.getName()+
                    "包含视频:"+course.getVideo()+
                    "【审批同意】");
            //因为继承,所以可直接用父类的approval
            //如果审批者不为空,继续发布交给下一个审批者
            if(approval !=null){
                approval.deploy(course);
            }
        }else{
            System.out.println("课程名称:"+course.getName()+
                    "不包含视频:"+"【审批拒绝】,流程结束。");
            return;
        }
    }
}

6、责任链模式的测试类

  • 测试类一
package com.rf.designPatterns.behavioral.chainOfResponsibility;

/**
 * @description: 责任链模式的测试类
 * @author: xz
 */
public class Test {
    public static void main(String[] args) {
        Course course = new Course();
        course.setName("java设计模式之责任链模式");
        course.setNotes("任链模式笔记");
        course.setVideo("责任链模式视频");

        NotesApproval notesApproval = new NotesApproval();
        VideoApproval videoApproval = new VideoApproval();
        notesApproval.setNextApproval(videoApproval);
        notesApproval.deploy(course);

    }
}

  • 输出结果一,如下

在这里插入图片描述

  • 测试类二
package com.rf.designPatterns.behavioral.chainOfResponsibility;

/**
 * @description: 责任链模式的测试类
 * @author: xz
 */
public class Test {
    public static void main(String[] args) {
        Course course = new Course();
        course.setName("java设计模式之责任链模式");
        //course.setNotes("任链模式笔记");
        course.setVideo("责任链模式视频");

        NotesApproval notesApproval = new NotesApproval();
        VideoApproval videoApproval = new VideoApproval();
        notesApproval.setNextApproval(videoApproval);
        notesApproval.deploy(course);

    }
}

  • 输出结果二,如下:

在这里插入图片描述

  • 测试类三
package com.rf.designPatterns.behavioral.chainOfResponsibility;

/**
 * @description: 责任链模式的测试类
 * @author: xz
 */
public class Test {
    public static void main(String[] args) {
        Course course = new Course();
        course.setName("java设计模式之责任链模式");
        course.setNotes("任链模式笔记");
        //course.setVideo("责任链模式视频");

        NotesApproval notesApproval = new NotesApproval();
        VideoApproval videoApproval = new VideoApproval();
        notesApproval.setNextApproval(videoApproval);
        notesApproval.deploy(course);

    }
}

  • 输出结果三,如下:

在这里插入图片描述 7、UML类图如下: 在这里插入图片描述

关注
打赏
1661269038
查看更多评论
立即登录/注册

微信扫码登录

0.0421s