返回
从职责链看电商购物优惠模式的应用
前端
2024-01-01 00:53:53
职责链模式是一种设计模式,它允许您将请求沿着链式结构传递,直到找到可以处理请求的组件。这种模式可以使您的代码更具模块化和可扩展性,因为它允许您在不修改现有代码的情况下添加新组件。
在电商购物中,职责链模式可以用于构建一个灵活的优惠系统。例如,我们可以定义一个基类DiscountHandler
,它包含处理折扣请求的通用方法。然后,我们可以创建多个子类来处理不同类型的折扣,例如FixedDiscountHandler
和PercentageDiscountHandler
。
class DiscountHandler {
public next: DiscountHandler | null = null;
public handle(request: DiscountRequest): DiscountResponse | null {
if (this.canHandle(request)) {
return this.applyDiscount(request);
} else if (this.next) {
return this.next.handle(request);
} else {
return null;
}
}
protected canHandle(request: DiscountRequest): boolean {
return false;
}
protected applyDiscount(request: DiscountRequest): DiscountResponse {
return {
discountAmount: 0,
discountedPrice: request.originalPrice,
};
}
}
class FixedDiscountHandler extends DiscountHandler {
private fixedDiscountAmount: number;
constructor(fixedDiscountAmount: number) {
super();
this.fixedDiscountAmount = fixedDiscountAmount;
}
protected canHandle(request: DiscountRequest): boolean {
return true;
}
protected applyDiscount(request: DiscountRequest): DiscountResponse {
const discountAmount = Math.min(this.fixedDiscountAmount, request.originalPrice);
const discountedPrice = request.originalPrice - discountAmount;
return {
discountAmount,
discountedPrice,
};
}
}
class PercentageDiscountHandler extends DiscountHandler {
private percentageDiscount: number;
constructor(percentageDiscount: number) {
super();
this.percentageDiscount = percentageDiscount;
}
protected canHandle(request: DiscountRequest): boolean {
return true;
}
protected applyDiscount(request: DiscountRequest): DiscountResponse {
const discountAmount = request.originalPrice * this.percentageDiscount;
const discountedPrice = request.originalPrice - discountAmount;
return {
discountAmount,
discountedPrice,
};
}
}
// 使用折扣处理链计算折扣
const discountRequest = {
originalPrice: 100,
};
const fixedDiscountHandler = new FixedDiscountHandler(50);
const percentageDiscountHandler = new PercentageDiscountHandler(0.2);
fixedDiscountHandler.next = percentageDiscountHandler;
const discountResponse = fixedDiscountHandler.handle(discountRequest);
console.log(`折扣金额:${discountResponse.discountAmount}`);
console.log(`折扣后价格:${discountResponse.discountedPrice}`);
输出:
折扣金额:20
折扣后价格:80
在上面的示例中,我们创建了一个折扣处理链,它包含一个固定折扣处理器和一个百分比折扣处理器。当我们调用handle()
方法时,请求将沿着链式结构传递,直到找到可以处理请求的组件。在我们的例子中,固定折扣处理器可以处理请求,因此它将返回折扣金额和折扣后价格。
职责链模式是一种非常强大的设计模式,它可以用于解决各种各样的问题。在电商购物中,职责链模式可以帮助商家构建一个灵活的优惠系统,实现精准营销,提升销售额。