折扣系统使用策略模式的示例分享
下文笔者讲述折扣系统使用策略模式的简介说明,如下所示
日常开发中,我们经常会根据不同的客户类型,进行不同的折扣 如:普通客户走普通客户的折扣处理类 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()); } }
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。