(十四)趣学设计模式之策略模式!
- 手机
- 2025-09-19 22:18:02

目录 一、 啥是策略模式?二、 为什么要用策略模式?三、 策略模式的实现方式四、 策略模式的优缺点五、 策略模式的应用场景六、 总结 🌟我的其他文章也讲解的比较有趣😁,如果喜欢博主的讲解方式,可以多多支持一下,感谢🤗! 🌟了解模板方法模式请看: (十 三)趣学设计模式 之 模版方法模式! ✨更多请看个人主页: 码熔burning
这篇文章带你详细认识一下设计模式中的策略模式
一、 啥是策略模式?想象一下,你要去旅游 ✈️,可以选择不同的交通方式:飞机 ✈️、火车 🚄、汽车 🚗。 你可以根据自己的需求和预算,选择最合适的交通方式。
策略模式,就是用来解决算法选择的问题! 它可以将算法封装成独立的策略类,并让客户端可以灵活地选择不同的策略 🎁。
简单来说,就是把不同的算法封装起来,让客户端可以根据需要选择不同的算法!
你需要使用不同的算法来解决同一个问题: 就像你需要使用不同的排序算法来排序数据 🔢!你希望在运行时动态地选择算法: 就像你需要根据不同的用户选择不同的推荐算法 🛍️!你希望避免大量的 if-else 语句: 就像你需要根据不同的条件执行不同的操作 😫! 二、 为什么要用策略模式?用策略模式,好处多多 👍:
提高代码的灵活性: 可以动态地选择不同的策略,使得代码更加灵活 🤸!提高代码的可维护性: 将算法封装成独立的策略类,使得代码更加清晰易懂 💡!符合开闭原则: 可以在不修改现有代码的情况下,增加新的策略,扩展功能 🆕!避免大量的 if-else 语句: 使得代码更加简洁优雅 💫! 三、 策略模式的实现方式策略模式主要包含三个核心概念:
策略接口(Strategy): 定义了策略的接口,声明了所有策略都需要实现的方法 🤝!具体策略类(ConcreteStrategy): 实现了策略接口,封装了具体的算法 ⚙️!环境类(Context): 持有策略接口的引用,负责在运行时选择并调用具体的策略 🏭! // 策略接口:支付方式 public interface PaymentStrategy { void pay(int amount); // 支付 } // 具体策略类:支付宝支付 public class AlipayPayment implements PaymentStrategy { private String account; // 支付宝账号 public AlipayPayment(String account) { this.account = account; } @Override public void pay(int amount) { System.out.println("使用支付宝账号 " + account + " 支付 " + amount + " 元"); } } // 具体策略类:微信支付 public class WechatPayment implements PaymentStrategy { private String phone; // 微信绑定的手机号 public WechatPayment(String phone) { this.phone = phone; } @Override public void pay(int amount) { System.out.println("使用微信绑定的手机号 " + phone + " 支付 " + amount + " 元"); } } // 环境类:支付上下文 public class PaymentContext { private PaymentStrategy paymentStrategy; // 支付策略 public PaymentContext(PaymentStrategy paymentStrategy) { this.paymentStrategy = paymentStrategy; } public void setPaymentStrategy(PaymentStrategy paymentStrategy) { this.paymentStrategy = paymentStrategy; } public void pay(int amount) { paymentStrategy.pay(amount); // 调用支付策略的支付方法 } } // 客户端 public class Client { public static void main(String[] args) { // 创建支付上下文 PaymentContext paymentContext = new PaymentContext(new AlipayPayment("1234567890")); // 默认使用支付宝支付 // 支付 paymentContext.pay(100); // 使用支付宝支付 100 元 // 切换支付方式 paymentContext.setPaymentStrategy(new WechatPayment("9876543210")); // 切换到微信支付 // 再次支付 paymentContext.pay(200); // 使用微信支付 200 元 } }代码解释
PaymentStrategy 接口定义了支付策略的接口,声明了 pay 方法。AlipayPayment 类和 WechatPayment 类实现了 PaymentStrategy 接口,封装了支付宝支付和微信支付的算法。PaymentContext 类是支付上下文,它持有 PaymentStrategy 接口的引用,负责在运行时选择并调用具体的支付策略。客户端通过 PaymentContext 类选择支付方式,并调用 pay 方法进行支付。输出结果
使用支付宝账号 1234567890 支付 100 元 使用微信绑定的手机号 9876543210 支付 200 元 四、 策略模式的优缺点优点:
提高代码的灵活性 🤸!提高代码的可维护性 💡!符合开闭原则 🆕!避免大量的 if-else 语句 💫!缺点:
增加了类的数量 😫!客户端需要知道所有的策略 🤯! 五、 策略模式的应用场景 排序算法: 可以使用不同的排序算法来排序数据 🔢!推荐算法: 可以根据不同的用户选择不同的推荐算法 🛍️!支付方式: 可以选择不同的支付方式进行支付 💰!压缩算法: 可以使用不同的压缩算法来压缩文件 🗜️! 六、 总结 策略模式就像选择困难症的福音,算法随心换,策略任你挑! 🎁核心概念包括策略接口、具体策略类和环境类! 🔑优点是提高代码的灵活性、提高代码的可维护性、符合开闭原则、避免大量的 if-else 语句! 👍缺点是增加了类的数量、客户端需要知道所有的策略! 👎适用于需要使用不同的算法来解决同一个问题,或者需要在运行时动态地选择算法的场景! 🎯希望这篇文章能让你彻底理解策略模式! 💯 祝你学习愉快! 😄 看完请看:(十 五)趣学设计模式 之 命令模式!
(十四)趣学设计模式之策略模式!由讯客互联手机栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“(十四)趣学设计模式之策略模式!”