【潜意识Java】Java里的策略模式

发布于:2025-02-10 ⋅ 阅读:(65) ⋅ 点赞:(0)

目录

❤️一、策略模式是什么

💛二、策略模式的结构和原理

💚三、策略模式在 Java 中的代码实现

💙四、策略模式的优势和应用场景

💙4.1 优势

💜4.2 应用场景

💚💚💚💚💚 

❤️❤️❤️

家人们,今天来聊聊 Java 编程里一个超实用的设计模式 —— 策略模式。这可是提升代码质量和灵活性的关键,掌握它,你的代码就能像变形金刚一样,灵活应对各种需求变化。

❤️❤️❤️

💛一、策略模式是什么

策略模式,简单来说,就是定义了一系列算法,把它们一个个封装起来,并且使它们可以相互替换。这就好比你出门选择交通工具,有走路、骑自行车、坐公交车、打车等多种策略,每种策略都能让你到达目的地,只是方式和效率不同。在编程里,不同的算法就是不同的策略,我们可以根据具体的业务场景选择最合适的算法。

💙二、策略模式的结构和原理

策略模式主要包含三个角色:

  • 抽象策略角色(Strategy):定义了一个公共接口,所有具体的策略类都要实现这个接口。这个接口就像是一个 “模板”,规定了具体策略类必须具备的方法。
  • 具体策略角色(ConcreteStrategy):实现了抽象策略角色定义的接口,每个具体策略类对应一种具体的算法实现。比如在计算商品折扣时,可能有普通会员折扣策略、VIP 会员折扣策略等,每个策略都是一个具体策略类。
  • 环境角色(Context):持有一个抽象策略类的引用,通过这个引用调用具体策略类的方法。它就像是一个 “指挥官”,决定在什么情况下使用哪种策略。

💛三、策略模式在 Java 中的代码实现

下面通过一个简单的示例来看看策略模式在 Java 中的实现。假设我们有一个电商系统,需要根据不同的会员等级计算商品的折扣价格。

首先,定义抽象策略接口:

// 折扣策略接口
public interface DiscountStrategy {
    double calculateDiscount(double originalPrice);
}

然后,实现具体策略类:

// 普通会员折扣策略
public class NormalMemberDiscountStrategy implements DiscountStrategy {
    @Override
    public double calculateDiscount(double originalPrice) {
        // 普通会员打9折
        return originalPrice * 0.9;
    }
}

// VIP会员折扣策略
public class VIPMemberDiscountStrategy implements DiscountStrategy {
    @Override
    public double calculateDiscount(double originalPrice) {
        // VIP会员打8折
        return originalPrice * 0.8;
    }
}

最后,定义环境角色类:

// 购物车类,持有折扣策略的引用
public class ShoppingCart {
    private DiscountStrategy discountStrategy;

    public ShoppingCart(DiscountStrategy discountStrategy) {
        this.discountStrategy = discountStrategy;
    }

    public double calculateTotalPrice(double originalPrice) {
        return discountStrategy.calculateDiscount(originalPrice);
    }
}

使用策略模式的客户端代码:

public class Client {
    public static void main(String[] args) {
        // 使用普通会员折扣策略
        DiscountStrategy normalStrategy = new NormalMemberDiscountStrategy();
        ShoppingCart normalCart = new ShoppingCart(normalStrategy);
        double normalTotalPrice = normalCart.calculateTotalPrice(100);
        System.out.println("普通会员的总价格: " + normalTotalPrice);

        // 使用VIP会员折扣策略
        DiscountStrategy vipStrategy = new VIPMemberDiscountStrategy();
        ShoppingCart vipCart = new ShoppingCart(vipStrategy);
        double vipTotalPrice = vipCart.calculateTotalPrice(100);
        System.out.println("VIP会员的总价格: " + vipTotalPrice);
    }
}

💜四、策略模式的优势和应用场景

❤️4.1 优势

  • 可维护性和可扩展性强:当需要添加新的折扣策略时,只需要新增一个具体策略类,实现抽象策略接口即可,不需要修改原有的代码。这就好比你要在交通工具列表里添加一个 “地铁” 策略,只需要单独实现一个 “坐地铁” 的策略类,不会影响到其他的出行策略。
  • 代码复用性高:不同的具体策略类可以复用抽象策略接口的方法定义,提高了代码的复用性。比如在计算折扣价格时,虽然具体的折扣算法不同,但都遵循 “计算折扣价格” 这个统一的接口定义。

💙4.2 应用场景

  • 算法多样化场景:在图形绘制中,可能有不同的绘制算法,如直线绘制算法、曲线绘制算法等,可以使用策略模式来根据不同的需求选择合适的绘制算法。
  • 业务规则频繁变化场景:在电商系统中,促销活动的规则经常变化,使用策略模式可以方便地切换不同的促销策略,如满减策略、赠品策略等。

❤️❤️❤️❤️

家人们,策略模式在 Java 编程里用处可大了,掌握它能让你的代码更优雅、更灵活。要是学习过程中有啥问题,咱们随时交流,一起把这门技术吃透!

❤️❤️❤️❤️


网站公告

今日签到

点亮在社区的每一天
去签到