当前位置: 首页 > news >正文

设计模式:责任链模式示例

责任链模式可以应用于多种场景,下面是几个不同场景的例子,每个例子都包括完整的代码。

示例1:日志处理系统

在日志处理系统中,日志消息可以根据其严重性(错误、警告、信息)被不同级别的日志处理器处理。

abstract class Logger {public static int INFO = 1;public static int DEBUG = 2;public static int ERROR = 3;protected int level;protected Logger nextLogger;public void setNextLogger(Logger nextLogger) {this.nextLogger = nextLogger;}public void logMessage(int level, String message) {if (this.level <= level) {write(message);}if (nextLogger != null) {nextLogger.logMessage(level, message);}}abstract protected void write(String message);
}class ConsoleLogger extends Logger {public ConsoleLogger(int level) {this.level = level;}@Overrideprotected void write(String message) {System.out.println("Standard Console::Logger: " + message);}
}class ErrorLogger extends Logger {public ErrorLogger(int level) {this.level = level;}@Overrideprotected void write(String message) {System.err.println("Error Console::Logger: " + message);}
}class FileLogger extends Logger {public FileLogger(int level) {this.level = level;}@Overrideprotected void write(String message) {System.out.println("File::Logger: " + message);}
}public class ChainPatternDemo {private static Logger getChainOfLoggers() {Logger errorLogger = new ErrorLogger(Logger.ERROR);Logger fileLogger = new FileLogger(Logger.DEBUG);Logger consoleLogger = new ConsoleLogger(Logger.INFO);errorLogger.setNextLogger(fileLogger);fileLogger.setNextLogger(consoleLogger);return errorLogger;}public static void main(String[] args) {Logger loggerChain = getChainOfLoggers();loggerChain.logMessage(Logger.INFO, "This is an information.");loggerChain.logMessage(Logger.DEBUG, "This is a debug level information.");loggerChain.logMessage(Logger.ERROR, "This is an error information.");}
}

示例2:支付处理系统

在一个支付处理系统中,一个支付请求可以通过多种支付方式进行处理。

abstract class PaymentHandler {protected PaymentHandler successor;public void setSuccessor(PaymentHandler successor) {this.successor = successor;}public abstract void handlePayment(PaymentRequest request);
}class PaymentRequest {private double amount;public PaymentRequest(double amount) {this.amount = amount;}public double getAmount() {return amount;}
}class PaypalHandler extends PaymentHandler {@Overridepublic void handlePayment(PaymentRequest request) {if (request.getAmount() < 1000) {System.out.println("Paypal processed $" + request.getAmount());} else if (successor != null) {successor.handlePayment(request);}}
}class CreditCardHandler extends PaymentHandler {@Overridepublic void handlePayment(PaymentRequest request) {if (request.getAmount() < 5000) {System.out.println("Credit Card processed $" + request.getAmount());} else if (successor != null) {successor.handlePayment(request);}}
}class BankTransferHandler extends PaymentHandler {@Overridepublic void handlePayment(PaymentRequest request) {System.out.println("Bank Transfer processed $" + request.getAmount());}
}public class PaymentChainDemo {public static void main(String[] args) {PaymentHandler paypal = new PaypalHandler();PaymentHandler creditCard = new CreditCardHandler();PaymentHandler bankTransfer = new BankTransferHandler();paypal.setSuccessor(creditCard);creditCard.setSuccessor(bankTransfer);PaymentRequest request = new PaymentRequest(450);paypal.handlePayment(request);request = new PaymentRequest(1200);paypal.handlePayment(request);request = new PaymentRequest(6500);paypal.handlePayment(request);}
}

责任链模式在软件设计中非常通用,并且可以在许多不同的场景中找到应用。这些示例展示了责任链模式在处理具有不同处理级别或条件的请求时的灵活性和可扩展性。在实际应用中,责任链模式可以帮助我们创建更加模块化和可管理的代码,但也需要注意不要过度使用,避免不必要的复杂性。

http://www.lryc.cn/news/334936.html

相关文章:

  • SpringBoot快速入门笔记(4)
  • GoPro相机使用的文件格式和频率
  • Redis Stack 安装部署
  • 【经典算法】LeetCode 5: 最长回文子串(Java/C/Python3实现含注释说明,Medium)
  • 39.Python从入门到精通—parseString 方法 Python 解析XML实例 使用xml.dom解析xml
  • 【蓝桥杯第九场小白赛】(部分)
  • 【Linux】Supervisor 基础
  • 48 全连接卷积神经网络 FCN【动手学深度学习v2】
  • pytorch中的nn.MSELoss()均方误差损失函数
  • 三国游戏(贪心 排序)
  • GPU环境安装与虚拟环境安装(适用于Windows下的李沐GPU)
  • Http Download
  • 【Android】Glide加载SVG,SVG转PNG
  • Spring、SpringMVC、Springboot三者的区别和联系
  • 一点点安全资料:网络安全扩展
  • vscode的源码插件GitHub Repositories
  • 如何定义快速开发平台框架?有何突出优势?
  • 二分练习题——奶牛晒衣服
  • python工具包【1】 -- 不同操作系统路径转换
  • JAVA中@FunctionalInterface 注解使用
  • 【Spring Cloud Alibaba】9 - OpenFeign集成Sentinel实现服务降级
  • Chrome浏览器如何跟踪新开标签的网络请求?
  • html写一个登录注册页面
  • Stable Diffusion|Ai赋能电商 Inpaint Anything
  • 启明智显M系列--工业级HMI芯片选型表
  • C语言面试题之最小高度树
  • 【随笔】Git 高级篇 -- 整理提交记录(上)cherry-pick(十五)
  • 上门服务小程序|上门服务系统|上门服务软件开发流程
  • Vuex(vue 项目中实现 频繁、大范围数据共享的技术方案)
  • 【Spring Cloud】服务容错中间件Sentinel入门