1.19(设计模式)策略模式

策略模式,定义一组算法(代码),将它们封装起来,使其可以相互替换。

策略模式首先要针对不同的情况(算法、代码)定义不同的策略类。

首先看个一段代码

要想插入代码有什么方法呢,我们可以定义个Insert接口,在其中定义insertCode方法。

然后具体的类去实现它,并将该类作为参数传递给main中的inserCode方法。

插入接口

插入接口实现类

需要变换插入代码,只需要将insertCode方法的参数修改即可,针对不同的代码都封装成一个类。

插入的那段代码可以看做是策略,策略可以是不同的代码,算法等。

策略模式需要策略对象,就是上述的Insert的实现类。

下面看下一个加减的例子,加减可以看做是两种策略。

我们把加减抽取出来,形成两种策略。

策略接口

加操作

减操作

使用策略的Context类,根据策略的不同会执行不同的操作。

Main

参考资料:

Original: https://www.cnblogs.com/huang-changfan/p/11057106.html
Author: gcmh
Title: 1.19(设计模式)策略模式

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/588449/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • Webpack的使用

    全局安装Webpack(尽量在项目目录中执行cmd命令) npm install -g webpack webpack-cli 在项目目录的js目录中创建几个js文件(之间的关联任…

    Java 2023年6月13日
    079
  • JAVA的类型转换(基本类型)

    类型转换 由于java是强类型语言,所以在进行某些运算的时候,需要用到类型转换。 低–>高指的是字节大小,从小到大。 小数的优先级大于整数 数值进行类型转换时不要…

    Java 2023年6月9日
    072
  • Java类与对象的讨论

    关于现实世界的对象真的很多很多,以下是最近探讨的一些对象: 这样定义是否存在争议呢? 中秋节与教师节碰杯,正值花好与月圆,桃李满天下! 还有月越来越圆,愿事事如愿! 手机:价钱(p…

    Java 2023年6月5日
    065
  • Maven 依赖调解源码解析(四):传递依赖,第一声明者优先

    本文是系列文章《Maven 源码解析:依赖调解是如何实现的?》第四篇,主要介绍依赖调解的第二条原则:传递依赖,第一声明者优先。请按顺序阅读其他系列文章,系列文章总目录参见:http…

    Java 2023年6月16日
    093
  • 【软件构造】Java设计模式

    创建模式:关注对象的创建过程 简单工厂模式 实现流程: 将需要创建的各种不同的产品对象封装到不同的类中,成为具体产品类 将具体产品类的公共代码进行提取封装到抽象产品类中,具体产品类…

    Java 2023年6月5日
    069
  • spice-agent:virtio-win-guest-tools:spice lqx:类似vmware-guest-toos、virtualbox-客户端附加组件的东西:根据窗口自动调整虚拟机的分辨率

    如题: 最新@2022-07-07的可用安装包:为2018年的v0.141 提示:该安装包 可用于 windows7! 提示:该安装包 可用于 windows7! Original…

    Java 2023年5月30日
    053
  • 解决 spring boot Failed to decode downloaded font

    一个静态资源加载的问题反反复复的解决了挺久,现在找到了解决方法,分享如下 csharp;gutter:true; src/main/java</p> <pre&g…

    Java 2023年6月5日
    071
  • HM2022ssm-mp3【DQL查询编程控制】

    条件查询 1.1 条件查询的类 MyBatisPlus将书写复杂的SQL查询条件进行了封装,使用编程的形式完成查询条件的组合。 这个我们在前面都有见过,比如查询所有和分页查询的时候…

    Java 2023年6月5日
    078
  • SpringBoot读取Resource下文件的几种方式

    最近在项目中涉及到Excle的导入功能,通常是我们定义完模板供用户下载,用户按照模板填写完后上传;这里待下载模板位置为resource/excelTemplate/test.xls…

    Java 2023年5月30日
    066
  • Redis 学习笔记

    前置准备 $ wget https://download.redis.io/releases/redis-6.2.6.tar.gz $ tar xzf redis-6.2.6.ta…

    Java 2023年6月8日
    059
  • 使用winsw部署spring boot项目

    下载的是最新版本的WinSW.NET4.exe和sample-minimal.xml 并重命名为projectService.exe,projectService.xml 修改配置…

    Java 2023年5月30日
    068
  • springboot使用undertow假死的原因

    最近使用springboot,在高并发下出现了一个问题: 服务的进程还跑着,端口缺不再监听了,报错如下: Too many open files in system 原来是开的系统…

    Java 2023年5月30日
    064
  • 企业级Nginx负载均衡与keepalived高可用实战(一)Nginx篇

    1、集群简介 1.1、什么是集群 简单地说,集群就是指一组(若干个)相互独立的计算机,利用高速通信网络组成的一个较大的计算机服务系统,每个集群节点(即集群中的每台计算机)都是运行各…

    Java 2023年5月30日
    074
  • 浅谈Java之属性赋值的先后顺序

    首先,什么是属性?属性也叫作成员变量,是类的组成部分之一。我们都知道Java一个类可以包含有: 属性,或者成员变量构造器方法,或者叫函数代码块,或者叫程序段内部类 那么结合这些,我…

    Java 2023年6月7日
    061
  • 设计模式笔记(一):单例模式

    单例模式可以说是设计模式中最简单的设计模式之一了。顾名思义,单例模式指的是一个类只提供一个固定的单个实例,大家共用该实例。 单例模式代码实现步骤: 1、私有化类的构造方法 2、提供…

    Java 2023年6月6日
    053
  • maven打包scala+java工程

    在 scala和java混合编程的时候,需要添加一些额外的配置到pom中,才能将scala文件的class加到最终的jar中 打包的命令 Original: https://www…

    Java 2023年5月29日
    061
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球