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)

大家都在看

  • Java动态脚本Groovy,高级啊!

    前言:请各大网友尊重本人原创知识分享,谨记本人博客: 南国以南i 简介: Groovy是用于Java虚拟机的一种敏捷的动态语言,它是一种成熟的面向对象编程语言,既可以用于面向对象编…

    Java 2023年6月5日
    086
  • 使用 sed 处理文本文件

    sed 是一款 GNU 流编辑器,可以按照指定的规则去处理文本文件或流,其强大的功能使用户在命令中快捷地修改文本文件成为可能。 它不会修改文件,除非使用shell重定向来保存结果。…

    Java 2023年6月7日
    0105
  • Spring(四)-声明式事务

    Spring-04 声明式事务 1、事务的定义 事务就是由 一组逻辑上紧密关联的 多个工作单元(数据库操作)而合并成一个整体,这些操作 要么都执行,要么都不执行。 2、事务的特性:…

    Java 2023年6月15日
    065
  • 注解和反射

    404. 抱歉,您访问的资源不存在。 可能是网址有误,或者对应的内容被删除,或者处于私有状态。 代码改变世界,联系邮箱 contact@cnblogs.com 园子的商业化努力-困…

    Java 2023年6月7日
    079
  • Spring中Bean的五个作用域

    当通过spring容器创建一个Bean实例时,不仅可以完成Bean实例的实例化,还可以为Bean指定特定的作用域。Spring支持如下5种作用域: singleton:单例模式,在…

    Java 2023年5月30日
    081
  • Java并发编程艺术系列-三、Java内存模型

    三、Java内存模型 本章大致分四个部分: Java内存模型的基础:主要介绍内存模型相关的基本概念; Java内存模型中的顺序一致性:主要介绍重排序与顺序一致性内存模型; 同步原语…

    Java 2023年6月9日
    074
  • springcloud Alibaba 2021.0.1.0 springboot 2.7.0 整合 Swagger3.0 报错解决方案

    引入依赖,版本 3.0.0 只引入一个即可 <span class="hljs-tag"><<span class="hljs…

    Java 2023年6月8日
    064
  • Java随谈(四)JDK对并发的支持

    Java对并发的支持 在Java诞生之时,Java设计者们就考虑了并发的问题,但受限于当时的技术和需求,只是对其进行了简单的支持。 随着时代更替( 多核处理器的普及,提高了程序员对…

    Java 2023年6月8日
    063
  • 集合框架与迭代器

    集合框架 集合是数组的升级,数组也是一种集合,集合是一种容器,用于存放对象的容器。不同数组的是,集合可以存放不同的类型,也不限数量。如果在集合中存放基本数据会自动装箱转换成对应的引…

    Java 2023年6月5日
    082
  • mybatis-plus

    mybatis-plus执行 SQL 分析打印 https://gitee.com/baomidou/mybatis-plus-samples/blob/master/mybati…

    Java 2023年5月30日
    088
  • a configuration error occured during startup.please verify the preference field

    tomcat启动时报错:a configuration error occured during startup.please verify the preference fiel…

    Java 2023年6月5日
    064
  • 标识符命名、instanceof 、自动装箱与拆箱、java关键字

    标识符的命名规则 标识符的含义: 是指在程序中,我们自己定义的内容,譬如, 类的名字, 方法名称以及 变量名称等等,都是标识符。 命名规则:(硬性要求) 标识符可以包含英文字母,0…

    Java 2023年6月13日
    078
  • 学习笔记

    狂神说ssm:https://blog.csdn.net/qq_33369905/article/details/105828924 Original: https://www.c…

    Java 2023年6月7日
    048
  • 【转】Nginx集群Tomcat时session共享问题

    描述 nginx实现tomcat集群后会出现这样的情形,登录时请求由tomcat1处理,而跳转到首页时负载到了tomcat2,而tomcat2中又没有tomcat1中的登录信息,又…

    Java 2023年5月30日
    084
  • 扇贝-每日一句

    偶然看到某个小伙伴的博客(https://alili.tech/ )有查询扇贝的每日一句,加上打字效果,让我感觉很新奇。所以扒了下扇贝的每日一句接口,放到自己的服务器上,后续集成到…

    Java 2023年6月6日
    0135
  • linux在下软件太卡?手把手教你配置国内镜像源

    ubuntu18.04 配置国内镜像源 修改配置文件 手动更改 用你熟悉的编辑器打开 /etc/apt/sources.list ,例如 vi /etc/apt/sources.l…

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