- 责任链模式
- 一个请求可能会被多个对象处理,而客户端不需要知道会被哪些对象处理,实现请求者和处理者的解耦。
- 责任链流程图
- 代码实现(例子)
-
/**
* 责任链模式-抽象handler
*
*/
public abstract class GatewayHandler {
private GatewayHandler gatewayHandler;
/**
* 定义抽象行为
*/
public abstract void service();
/**
* 设置下一个handler
*/
public void setHandler(GatewayHandler gatewayHandler){
this.gatewayHandler=gatewayHandler;
}
/**
* 执行
*/
public void nextService(){
if (gatewayHandler!=null){
gatewayHandler.service();
}
}
}
/**
* 责任链模式-具体handler
*/
public class BlacklistHandler extends GatewayHandler {
@Override
public void service() {
System.out.println("<------黑名单拦截----->");
nextService();
}
}
/**
* 责任链模式-具体handler
*/
public class ConversationHandler extends GatewayHandler {
@Override
public void service() {
System.out.println("第三关用户会话拦截判断....");
nextService();
}
}
/**
* 责任链模式-具体handler
*/
public class CurrentLimitHandler extends GatewayHandler {
@Override
public void service() {
System.out.println("<------网关限流----->");
nextService();
}
}
/**
*责任链模式-handler会话工厂
*/
public class HandlerFactory {
public static GatewayHandler getGatewayHandler(){
GatewayHandler currentLimitHandler=new CurrentLimitHandler();
GatewayHandler blacklistHandler=new BlacklistHandler();
GatewayHandler conversationHandler=new ConversationHandler();
//设置下一个handler
currentLimitHandler.setHandler(blacklistHandler);
//设置下一个handler
blacklistHandler.setHandler(conversationHandler);
return currentLimitHandler;
}
}
@Test
public static void main(String[] args) {
GatewayHandler gatewayHandler = getGatewayHandler();
gatewayHandler.service();
}
-
- 通过Java继承,多态,子类实现由父类接收(向上转型),在通过父类的抽象方法调用子类的具体业务实现方法。
-----------------------------------------------------------------------------------------------------------本文参考自蚂蚁课堂精讲设计模式系列