当前位置: 首页 > news >正文

设计模式之-策略模式,快速掌握策略模式,通俗易懂的讲解策略模式以及它的使用场景

系列文章目录

设计模式之-6大设计原则简单易懂的理解以及它们的适用场景和代码示列
设计模式之-单列设计模式,5种单例设计模式使用场景以及它们的优缺点
设计模式之-3种常见的工厂模式简单工厂模式、工厂方法模式和抽象工厂模式,每一种模式的概念、使用场景和优缺点。
设计模式之模板方法模式,通俗易懂快速理解,以及模板方法模式的使用场景
设计模式之-建造者模式通俗易懂理解,以及建造者模式的使用场景和示列代码
设计模式之-代理模式,快速掌握理解代理模式,以及代理模式的使用场景
设计模式之-原型模式,快速掌握原型模式,通俗易懂的理解原型模式以及使用场景
设计模式之-中介者模式,快速掌握中介者模式,通俗易懂的讲解中介者模式以及它的使用场景
设计模式之-责任链模式,快速掌握责任链模式,通俗易懂的讲解责任链模式以及它的使用场景
设计模式之-装饰模式,快速掌握装饰模式,通俗易懂的讲解装饰模式以及它的使用场景
设计模式之-适配器模式,快速掌握适配器模式,通俗易懂的讲解适配器模式以及它的使用场景


文章目录

  • 系列文章目录
  • 一、快速理解策略模式
  • 二、策略模式的使用场景
  • 三、代码示例


一、快速理解策略模式

策略模式是一种行为型设计模式,它定义了一系列的算法,并将每个算法封装到独立的策略类中,使它们可以相互替换。策略模式使算法的变化独立于使用算法的客户端。

在现实生活中,策略模式的例子可以是支付方式的选择。当用户进行支付时,可以根据具体的支付方式选择不同的策略,如现金支付、信用卡支付或支付宝支付。这些支付方式都是不同的算法,但用户不需要关心具体的实现细节,只需要选择合适的支付方式。

二、策略模式的使用场景

  1. 当需要在不同情况下选择不同的算法时,可以使用策略模式。策略模式通过封装每个算法到独立的策略类中,使得算法的变化独立于客户端。
  2. 当一个类中有多种行为,并且这些行为可以相互替换时,可以使用策略模式。策略模式可以避免使用大量的条件语句,使代码更加清晰和可维护。

三、代码示例

下面是一个通俗易懂的策略模式示例代码,以动物叫声为场景:

// 抽象策略:叫声策略
interface SoundStrategy {void makeSound();
}// 具体策略:狗叫声
class DogSoundStrategy implements SoundStrategy {@Overridepublic void makeSound() {System.out.println("汪汪汪!");}
}// 具体策略:猫叫声
class CatSoundStrategy implements SoundStrategy {@Overridepublic void makeSound() {System.out.println("喵喵喵!");}
}// 环境类:动物
class Animal {private SoundStrategy soundStrategy;public void setSoundStrategy(SoundStrategy soundStrategy) {this.soundStrategy = soundStrategy;}public void makeSound() {soundStrategy.makeSound();}
}// 客户端代码
public class Main {public static void main(String[] args) {Animal dog = new Animal();dog.setSoundStrategy(new DogSoundStrategy());dog.makeSound(); // 汪汪汪!Animal cat = new Animal();cat.setSoundStrategy(new CatSoundStrategy());cat.makeSound(); // 喵喵喵!}
}

在上面的示例中,SoundStrategy是抽象策略,定义了叫声策略的方法。DogSoundStrategy和CatSoundStrategy是具体策略,分别实现了叫声策略的方法。

Animal是环境类,持有一个叫声策略的引用。通过调用环境类的makeSound方法,可以根据设置的叫声策略来发出不同的叫声。

在客户端代码中,首先创建了一个狗对象dog,并设置了狗叫声的策略。然后调用狗对象的makeSound方法,输出狗的叫声。接着创建了一个猫对象cat,并设置了猫叫声的策略,再调用猫对象的makeSound方法,输出猫的叫声。

通过使用策略模式,可以根据不同的情况选择不同的策略,而不需要改变环境类的代码。策略模式将算法的变化独立于客户端,使代码更加灵活和可扩展。

http://www.lryc.cn/news/266325.html

相关文章:

  • 【leetcode100-019】【矩阵】螺旋矩阵
  • 【计算机视觉中的多视图几何系列】深入浅出理解针孔相机模型
  • 轻量级Python IDE使用(三)——函数
  • 计算机图形学理论(3):着色器编程
  • ubuntu20.04安装timeshift最新方法
  • 小狐狸ChatGPT付费创作系统小程序端开发工具提示打开显示无法打开页面解决办法
  • DQL-基本查询
  • 漏洞复现-红帆OA iorepsavexml.aspx文件上传漏洞(附漏洞检测脚本)
  • Leetcode 2976. Minimum Cost to Convert String I
  • ZKP Mathematical Building Blocks (2)
  • blender径向渐变材质-着色编辑器
  • 2023美团机器人研究院学术年会成功举办
  • swing快速入门(二十七)
  • Vue 封装echarts柱状图(Bar)组件
  • 异常(Java)
  • vue的插槽解析
  • Spring(3)Spring从零到入门 - Spring整合技术及AOP事务管理
  • 适配器模式学习
  • NET中使用Identity+CodeFirst+Jwt实现登录、鉴权
  • 详解Keras3.0 API: Optimizers
  • 【数据结构】字符串匹配|BF算法|KMP算法|next数组的优化
  • 阿里云 ACK One 新特性:多集群网关,帮您快速构建同城容灾系统
  • vscode自定义代码片段
  • 【贪心算法】专题练习一
  • 【JMeter】使用nmon进行性能资源监控
  • Unity预设体
  • Elasticsearch 写入优化探索:是什么影响了refresh 耗时?
  • Java8新特性——函数式接口
  • Epson打印机连接wifi
  • Chapter 7 - 6. Congestion Management in Ethernet Storage Networks以太网存储网络的拥塞管理