设计模式——责任链
什么是责任链
责任链模式是一种行为型设计模式,将多个对象连接成一条链,并且沿着这条链传递请求,让多个对象都有机会处理这个请求,请求会顺着链传递,直到某个对象处理它为止,
它主要避免了请求发送者和接受者之间的耦合,增强了系统的灵活性和可扩展性。责任链模式的特点:
- 解耦请求发送者与接收者:请求发送者无需知道请求是由哪个处理器处理的。
- 动态组合处理器:可以灵活地动态改变链的结构,
- 请求沿链传递:请求可以由链中的一个或多个处理器处理,
一般用在什么场景?
- 请求需要多个处理器:例如日志记录的不同级别处理。
- 动态指定处理流程:请求的处理方式不固定,依赖于运行时的链条结构。
- 消除条件分支:用责任链代替代码中的 if-else 或 switch-case 语句。
实战
则会使一个初始化 AI 客户端代码
/*** 初始化 AI 客户端* @param dashscopeChatModel*/public LoveApp(ChatModel dashscopeChatModel) {// 初始化基于内存的对话记忆ChatMemory chatMemory = new InMemoryChatMemory();chatClient = ChatClient.builder(dashscopeChatModel).defaultSystem(SYSTEM_PROMPT).defaultAdvisors(new MessageChatMemoryAdvisor(chatMemory),//自定义日志 Advisornew MyLoggerAdvisor()// 自定义推理增强 Advisor,可按需开启//new ReReadingAdvisor()).build();}
它用的就是责任链模式,核心就是:
- 将多个 Advisor(类似处理节点)串联成一条链,依次传递请求,直到链末尾结束。
- 每个节点都可以:做前置处理(拦截、修改请求)、做后置处理(拦截、修改响应)
- 责任链的“节点”:Advisor 的调用顺序由 getOrder方法设置,order 值越小,优先级越高