网站设计报价表,wordpress 外观菜单,网络营销的起源,七台河新闻联播2023目录 一、 啥是策略模式#xff1f;二、 为什么要用策略模式#xff1f;三、 策略模式的实现方式四、 策略模式的优缺点五、 策略模式的应用场景六、 总结 #x1f31f;我的其他文章也讲解的比较有趣#x1f601;#xff0c;如果喜欢博主的讲解方式#xff0c;可以多多支… 目录 一、 啥是策略模式二、 为什么要用策略模式三、 策略模式的实现方式四、 策略模式的优缺点五、 策略模式的应用场景六、 总结 我的其他文章也讲解的比较有趣如果喜欢博主的讲解方式可以多多支持一下感谢 了解模板方法模式请看 (十 三)趣学设计模式 之 模版方法模式 ✨更多请看个人主页 码熔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;}Overridepublic void pay(int amount) {System.out.println(使用支付宝账号 account 支付 amount 元);}
}// 具体策略类微信支付
public class WechatPayment implements PaymentStrategy {private String phone; // 微信绑定的手机号public WechatPayment(String phone) {this.phone phone;}Overridepublic 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 语句 缺点是增加了类的数量、客户端需要知道所有的策略 适用于需要使用不同的算法来解决同一个问题或者需要在运行时动态地选择算法的场景
希望这篇文章能让你彻底理解策略模式 祝你学习愉快 看完请看(十 五)趣学设计模式 之 命令模式