折扣系统使用策略模式的示例分享
下文笔者讲述折扣系统使用策略模式的简介说明,如下所示
日常开发中,我们经常会根据不同的客户类型,进行不同的折扣 如:普通客户走普通客户的折扣处理类 VIP SVIP 等分别走自己的handler处理折扣 那么这种情况,我们就可以使用策略模式进行相应的处理,如下所示例:折扣系统
1.定义策略接口
public interface DiscountStrategy {
double applyDiscount(double amount);
}
2.实现具体的策略类
public class NormalDiscount implements DiscountStrategy {
@Override
public double applyDiscount(double amount) {
return amount; //无折扣
}
}
public class MemberDiscount implements DiscountStrategy {
@Override
public double applyDiscount(double amount) {
return amount * 0.95; // 5% 折扣
}
}
public class VIPDiscount implements DiscountStrategy {
@Override
public double applyDiscount(double amount) {
return amount * 0.85; // 15% vip折扣
}
}
3.创建上下文类
public class ShoppingCart {
private list<Item> items;
private DiscountStrategy discountStrategy;
public ShoppingCart() {
this.items = new ArrayList<>();
}
public void addItem(Item item) {
this.items.add(item);
}
public void removeItem(Item item) {
this.items.remove(item);
}
public double calculateTotal() {
double sum = 0;
for (Item item : items) {
sum += item.getPrice();
}
return sum;
}
public void setDiscountStrategy(DiscountStrategy discountStrategy) {
this.discountStrategy = discountStrategy;
}
public double getDiscountedTotal() {
double total = calculateTotal();
if (discountStrategy != null) {
return discountStrategy.applyDiscount(total);
}
return total;
}
}
4.使用策略模式
public class ShoppingCartTest {
public static void main(String[] args) {
ShoppingCart cart = new ShoppingCart();
Item item1 = new Item("2222", 230);
Item item2 = new Item("7777", 489);
cart.addItem(item1);
cart.addItem(item2);
//不进行折扣
System.out.println("Total without discount: " + cart.getDiscountedTotal());
//会员折扣
cart.setDiscountStrategy(new MemberDiscount());
System.out.println("Total with member discount: " + cart.getDiscountedTotal());
//VIP折扣
cart.setDiscountStrategy(new VIPDiscount());
System.out.println("Total with VIP discount: " + cart.getDiscountedTotal());
}
}
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。


