折扣系统使用策略模式的示例分享

欣喜 Java教程 发布时间:2025-02-24 15:29:24 阅读数:7910 1
下文笔者讲述折扣系统使用策略模式的简介说明,如下所示
日常开发中,我们经常会根据不同的客户类型,进行不同的折扣
 如:普通客户走普通客户的折扣处理类
	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());
    }
}
版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。

本文链接: https://www.Java265.com/JavaCourse/202502/8329.html

最近发表

热门文章

好文推荐

Java265.com

https://www.java265.com

站长统计|粤ICP备14097017号-3

Powered By Java265.com信息维护小组

使用手机扫描二维码

关注我们看更多资讯

java爱好者