职责连模式:
使多个对象都有机会处理请求,从而避免请求的发送者和接受者之间的耦合关系,将多个对象连成一条链,并沿着这条链传递请求,直到有一个对象处理它为止。
// 管理者
public abstract class Manager {
// 当前管理者的上级
private Manager superior;
public Manager getSuperior() {
return superior;
}
public void setSuperior(Manager superior) {
this.superior = superior;
}
// 处理员工请求
public abstract void handleRequest(Request req);
}
// 经理
public class CommonMannager extends Manager {
@Override
public void handleRequest(Request req) {
if (req.getType().equals("leave") && req.getNum() <= 2) {
System.out.println("CommonManager: I agree the leave request");
} else {
System.out.println("CommonManager: I has no right to handle it, Pls ask help from Majordemo!");
// 申请转到上级处理
this.getSuperior().handleRequest(req);
}
}
}
// 总监
public class Majordemo extends Manager {
@Override
public void handleRequest(Request req) {
if (req.getType().equals("leave") && req.getNum() <= 5) {
System.out.println("Majordemo: I agree the leave request");
} else {
System.out.println("Majordemo: I has no right to handle it, Pls ask help from GereralManager!");
// 申请转到上级处理
this.getSuperior().handleRequest(req);
}
}
}
// 总经理
public class GeneralManager extends Manager {
@Override
public void handleRequest(Request req) {
if (req.getType().equals("leave")) {
System.out.println("GereralManager: I agree the leave request");
} else if (req.getType().equals("increase salary") && req.getNum() <= 1000) {
System.out.println("GereralManager: I agree the salary increase request");
} else {
System.out.println("GereralManager: pls request next time");
}
}
}
// 申请者
public class Request {
// 申请类别
private String type;
// 申请内容
private String content;
// 申请数量
private int num;
public Request(String type, int num) {
this.type = type;
this.num = num;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
public int getNum() {
return num;
}
public void setNum(int num) {
this.num = num;
}
}
// 客户端
public class ChainOfResponsibilityMain {
public static void main(String[] args) {
Manager commonManager = new CommonMannager();
Manager majordemo = new Majordemo();
Manager generalManager = new GeneralManager();
// 设置自己的上级
commonManager.setSuperior(majordemo);
majordemo.setSuperior(generalManager);
// 设置员工请求内容
Request req1 = new Request("leave", 3);
Request req2 = new Request("increase salary", 2000);
// 经理接受请求
commonManager.handleRequest(req1);
commonManager.handleRequest(req2);
}
}
职责链的好处:
1. 职责链可以简化对象的相互连接,它们仅需保持一个指向其后继者的引用,而不需要保持它所有候选接受者的引用。
2. 由于是客户端来定义链的结构,我们可以随时地增加或修改处理一个请求的结构,增加了给对象指派职责的灵活性。
分享到:
相关推荐
职责链模式 进来者模式 访问者模式 数据结构 Stack - 使用泛型实现Stack 生成斐波那契数列 使用容器 利用迭代器实现原材料 实用程序 StringUtil类 - 封装常用的String方法 基本的 正则表达式的使用方式
大话设计模式总结.pdf大话设计模式总结.pdf大话设计模式总结.pdf大话设计模式总结.pdf大话设计模式总结.pdf
设计模式之《大话设计模式》.pptx
Android之大话设计模式——:抽象工厂模式借鉴.pdf
大话设计模式 完整设计模式介绍
《大话设计模式》C++实现-design-patterns-cpp
读书笔记:大话设计模式C++
android之大话设计模式.pdf
《大话设计模式》对各种设计模式,做简要归纳(原创)
二十三种设计模式二十三种设计模式二十三种设计模式
本文实例讲述了Python设计模式之职责链模式原理与用法。分享给大家供大家参考,具体如下: 职责链模式(Chain Of Responsibility):使多个对象都有机会处理请求,从而避免发送者和接收者的耦合关系。将对象连成链并...
树懒自己整理的大话设计模式的修行笔记,对程序设计有很大的帮助,主要是以自己学习的习惯整理的!
读书笔记:设计模式大话设计模式
单例模式是软件设计模式中的一种经典模式,它在许多场景下被广泛使用,尤其是在需要全局唯一实例的情况下。本文将深入探讨单例模式的概念、作用、实现方式以及其在实际编程中的应用。 单例模式的核心思想是确保一个...
大话设计模式之外观模式 经典代码 C#类
android之大话设计模式整理.pdf
以上只是设计模式中的一部分,"大话模式源代码示例"涵盖的28个实例将覆盖更多的模式,如命令模式、职责链模式、状态模式、访问者模式等。通过这些源代码,我们可以深入理解每个模式的工作原理,学习如何在实际项目中...
大话设计模式源代码之简单工厂模式 经典代码
参考<大话设计模式>,采用python书写的模板类。职责链模式。
NULL 博文链接:https://helei050.iteye.com/blog/2086309