返回
策略模式与责任链模式的实践应用
前端
2023-10-12 10:36:29
导语
设计模式是一种优秀的代码组织和设计理念,它可以帮助我们构建灵活、可维护和可扩展的代码。本文将以百万 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 商城项目中得到了广泛的应用。通过合理运用这些模式,我们可以大幅提升代码的灵活性和可维护性,从而打造出更优秀的软件系统。