责任链模式
字数: 0 字 时长: 0 分钟
简介
责任链模式(Chain of Responsibility Pattern)的核心思想是:将多个处理请求的对象连接成一个链,每个对象在链上依次处理请求,直到有对象处理完请求为止。
UML 类图
- 抽象处理者(Handler):声明一个处理请求的接口,通常包括一个方法
handleRequest()
,并且持有对下一个处理者的引用 - 具体处理者(ConcreteHandler):具体处理者,如果当前对象能处理请求就处理,否则将请求转发给下一个处理者
实现示例
以“订单优惠处理”为例:
java
// 订单类
class Order {
private double price;
private boolean isVip;
}
// 1. 抽象处理者
interface DiscountHandler {
void setNextHandler(DiscountHandler handler);
void handle(Order order);
}
// 2. 具体处理者
// 满减
class FullDiscountHandler implements DiscountHandler {
private VipDiscountHandler nextHandler;
@Override
public void setNextHandler(DiscountHandler handler) {
this.nextHandler = handler;
}
@Override
public void handle(Order order) {
if (order.getTotalPrice() >= 100) {
System.out.println("满 100 减 10");
}
if (nextHandler != null) {
nextHandler.handle(order);
}
}
}
class VipDiscountHandler implements DiscountHandler {
private CashDiscountHandler nextHandler;
@Override
public void setNextHandler(DiscountHandler handler) {
this.nextHandler = handler;
}
@Override
public void handle(Order order) {
if (order.isVip) {
System.out.println("会员 8.8 折");
}
if (nextHandler != null) {
nextHandler.handle(order);
}
}
}
// 3. 调用示例
public static void main(String[] args) {
Order order = new Order();
order.setPrice(120);
order.setVip(true);
// 创建处理器
DiscountHandler fullDiscountHandler = new FullDiscountHandler();
DiscountHandler vipDiscountHandler = new VipDiscountHandler();
// 设置责任链
fullDiscountHandler.setNextHandler(vipDiscountHandler);
// 开始处理
fullDiscountHandler.handle(order);
}