返回

策略模式与责任链模式的实践应用

前端

导语

设计模式是一种优秀的代码组织和设计理念,它可以帮助我们构建灵活、可维护和可扩展的代码。本文将以百万 PV 商城实战为例,详细介绍如何运用策略模式和责任链模式解决实际业务问题。

策略模式

策略模式的核心思想是将算法族封装起来,使其可以独立于客户端对象而变化。在百万 PV 商城项目中,我们使用策略模式实现了不同的商品折扣计算方式。

interface DiscountStrategy {
    double calculateDiscount(Item item);
}

class NoDiscountStrategy implements DiscountStrategy {
    @Override
    public double calculateDiscount(Item item) {
        return 0;
    }
}

class MembershipDiscountStrategy implements DiscountStrategy {
    @Override
    public double calculateDiscount(Item item) {
        return item.getPrice() * 0.9;
    }
}

class VipDiscountStrategy implements DiscountStrategy {
    @Override
    public double calculateDiscount(Item item) {
        return item.getPrice() * 0.8;
    }
}

通过这种方式,我们可以灵活地切换不同的折扣策略,而无需修改客户端代码。

责任链模式

责任链模式是一种将请求沿着处理者链条传递的模式,每个处理者都有机会处理请求并决定是否继续传递。在百万 PV 商城项目中,我们使用责任链模式实现了复杂的订单处理流程。

abstract class Handler {
    protected Handler nextHandler;

    public Handler(Handler nextHandler) {
        this.nextHandler = nextHandler;
    }

    public abstract void handleRequest(Order order);
}

class VerifyOrderHandler extends Handler {
    public VerifyOrderHandler(Handler nextHandler) {
        super(nextHandler);
    }

    @Override
    public void handleRequest(Order order) {
        if (order.verify()) {
            System.out.println("订单已通过验证");
            nextHandler.handleRequest(order);
        } else {
            System.out.println("订单未通过验证");
        }
    }
}

class CalculatePriceHandler extends Handler {
    public CalculatePriceHandler(Handler nextHandler) {
        super(nextHandler);
    }

    @Override
    public void handleRequest(Order order) {
        order.calculatePrice();
        System.out.println("订单价格已计算");
        nextHandler.handleRequest(order);
    }
}

class GenerateInvoiceHandler extends Handler {
    public GenerateInvoiceHandler() {
        super(null);
    }

    @Override
    public void handleRequest(Order order) {
        order.generateInvoice();
        System.out.println("订单已生成发票");
    }
}

通过将订单处理流程拆分成一系列独立的处理者,我们可以灵活地调整流程,添加新的处理者或删除不必要的处理者。

结论

策略模式和责任链模式是设计模式中非常重要的两类模式,它们在百万 PV 商城项目中得到了广泛的应用。通过合理运用这些模式,我们可以大幅提升代码的灵活性和可维护性,从而打造出更优秀的软件系统。