如果本文对你们的开发之路有所帮助,请帮忙点个赞,您的支持是我坚持写博客的动力
【设计模式相关书籍】wx关注【Java从零学架构】,后台回复【设计模式】自取
上一篇文章带着大家输入学习了设计模式的工厂模式,这篇文章带着大家深入责任链模式
项目代码见 https://gitee.com/janyxe/design_patterns
Avoid coupling the sender of a request to its receiver by giving more
than one object a chance to handle the request.Chain the receiving objects
and pass the request along the chain until an object handles it.
使多个对象都有机会处理请求,从而避免了请求的发送者和接受者之间的耦合关
系。将这些对象连成一条链,并沿着这条链传递该请求,直到有对象处
理它为止。
简言之:责任链模式的核心在“链”上,“链”是由多个处理者ConcreteHandler
组成,根据“链”传递顺序依次处理
责任链类图
优点
缺点
实现代码背景:网关作为作为程序入口,拦截请求实现权限控制以及登录日志记录的功能
“链”:Token校验 -> 权限校验 -> 日志处理
项目代码见 https://gitee.com/janyxe/design_patterns
定义抽象方法
com.jany.chain.GatewayHandler
public abstract class GatewayHandler {
private GatewayHandler gatewayHandler;
/**
* 过滤
*/
public abstract void doFilter();
public GatewayHandler(GatewayHandler gatewayHandler) {
this.gatewayHandler = gatewayHandler;
}
protected void nextHandler() {
if (gatewayHandler != null) {
gatewayHandler.doFilter();
}
}
}
Token 校验逻辑
com.jany.chain.TokenHandler
/**
* Token 校验
*/
public class TokenHandler extends GatewayHandler{
public TokenHandler(GatewayHandler gatewayHandler) {
super(gatewayHandler);
}
public void doFilter() {
System.out.println("处理Token验证逻辑");
nextHandler();
}
}
权限校验
com.jany.chain.PermissionHandler
public class PermissionHandler extends GatewayHandler{
public PermissionHandler(GatewayHandler gatewayHandler) {
super(gatewayHandler);
}
public void doFilter() {
System.out.println("处理权限逻辑");
nextHandler();
}
}
日志处理
com.jany.chain.LoggerHandler
/**
* 日志处理
*/
public class LoggerHandler extends GatewayHandler{
public LoggerHandler(GatewayHandler gatewayHandler) {
super(gatewayHandler);
}
public void doFilter() {
System.out.println("处理日志逻辑");
}
}
责任链实现
com.jany.chain.ChainApp
/**
* 责任链实现
*/
public class ChainApp {
/**
* 获取GatewayHandler
* @return
*/
public static GatewayHandler getGatewayHandler(){
return new TokenHandler(new PermissionHandler(new LoggerHandler(null)));
}
public static void main(String[] args) {
GatewayHandler gatewayHandler = getGatewayHandler();
gatewayHandler.doFilter();
}
}
运行程序,控制台输出
处理Token验证逻辑
处理权限逻辑
处理日志逻辑
如果本文对你们的开发之路有所帮助,请帮忙点个赞,您的支持是我坚持写博客的动力
【设计模式相关书籍】wx关注【Java从零学架构】,后台回复【设计模式】自取