设计模式之策略模式

  1. 策略模式的作用

在策略模式(Strategy Pattern)中,一个类的行为或其算法可以在运行时更改。

  1. 为什么要使用策略模式?

我们想象一下最常见的场景:排序。排序无非两种选择,升序或降序。如果我们要封装一个类要自由的切换两种排序要怎么做呢?

最常见的做法是这样的:

我们可以发现这要的代码极不美观,而且这还是只有两种情况的时候,加入有N中情况那岂不是要写很多的判断。甚至可能大多数时候我们并不能提前想好所有的类型,如果临时要加入新的算法只能再次修改原来的代码。维护很困难。这时候我们就可以使用策略模式来实现。

  1. 怎么使用策略模式?

以上述排序为例,在java中我们需要实现自己的比较器。

如此,当我们在需要定义新的排序规则(因为排序的对象可能是多种多样的),当我们需要一个新的规则时,我们不需要去修改Collections.sort()方法的内容,而是实现一个自己的比较器,这样就可以实现新的排序。

  1. 分析一下策略模式是怎么构成的?

我们同样以上述排序为例:

(1)策略接口

(2)不同的实现

(3)调用者中(其中一个

Original: https://www.cnblogs.com/liwangcai/p/11872874.html
Author: 神奇海螺。
Title: 设计模式之策略模式

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

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

(0)

大家都在看

  • 5.伪异步I/O编程

    样例: 1.定义一个线程池…

    Java 2023年6月5日
    068
  • mybatis #与$区别

    mybatis #与$区别 {}变量解析到SQL有带引号字符串;如查询条件变量 如:select * from user where name = #{name};为:select…

    Java 2023年5月30日
    074
  • spring boot集成RabbitMQ-SpringBoot(24)

    认识RabbitMQ 1.1介绍RabbitMQ RabbitMQ 是开源的高级消息队列协议(Advanced Message Queueing Protocol, AMQP) 的…

    Java 2023年6月13日
    076
  • jQuery笔记

    什么是jQuery? jQuery是一个实用的JavaScript函数库,jQuery极大地简化了JS对DOM的操作,封装并实现的一系列常用的方法。 jQuery库封装了JavaS…

    Java 2023年6月16日
    097
  • java MD5加密

    /** * MD5加密 * @param message 要进行MD5加密的字符串 * @return 加密结果为32位字符串 */ private static String g…

    Java 2023年6月16日
    075
  • session 和 cookie (转)

    会话(Session)跟踪是Web程序中常用的技术,用来 跟踪用户的整个会话。常用的会话跟踪技术是Cookie与Session。 Cookie通过在客户端记录信息确定用户身份, S…

    Java 2023年5月30日
    082
  • 自定义博客园主题

    博客园主题代码GitHub地址 https://github.com/yushixin-1024/Cnblogs-Theme-SimpleMemory 该项目Fork自https:…

    Java 2023年6月8日
    0118
  • 【Java面试】大厂裁员,小厂倒闭,如何搞定面试官Java SPI是什么?有什么用?

    “Java SPI是什么?有什么用?”这是阿里p6面试过程中,第二面的时候遇到的一个真实的问题。如果你不理解SPI,建议你看完整个视频。大家好,我是Mic,…

    Java 2023年6月16日
    085
  • uu467 图片选择修改点

    com.imagepicker.ImagePickerModule if (this.options.useFrontCamera) { System.err.println(&q…

    Java 2023年5月30日
    064
  • 简单易懂讲IO

    流式 IO 是传统 IO,通过构造输入输出流,讲信息从一个地方读取,输出到另一个地方。常见的有读取文件以及写入文件。 基本 API 流失 IO 基本可以分为两个门派,一个以 Inp…

    Java 2023年6月8日
    0118
  • 根据java实现企业微信消息推送功能

    第一步:申请企业微信注册企业(链接:https://work.weixin.qq.com/nl/sem/registe?s=c&from=1011017189&bd…

    Java 2023年6月7日
    087
  • Ribbon

    Spring Cloud Ribbon是基于Netflix Ribbon实现的一套 客户端 负载均&#x8…

    Java 2023年6月8日
    063
  • Java-API+Kafka实现自定义分区

    1.pom.xml导入kafka依赖包; 2.kafka普通生产者实现方式; 3.kafka带回调函数的生产者; 4.生产者自定义分区; 4.1使用自定义分区 csharp;gut…

    Java 2023年6月9日
    072
  • SpringSecurity学习

    一、SpringSecurity框架简介 SpringSecurity基于Spring框架,提供了一套Web应用安全性的完整解决方案 一般来说,Web应用的安全性包括用户认证(Au…

    Java 2023年5月30日
    0104
  • Jenkins中HTML报告无法正常显示问题解决

    自动化结果生成了HTML报告,但是在Jenkins中打开报告却显示空白,打开控制台,可以看到该报错 参考https://www.jenkins.io/doc/book/securi…

    Java 2023年6月13日
    088
  • LeetCode.1185-一周中的星期几(Day of the Week)

    这是小川的第 415次更新,第 448篇原创 看题和准备 今天介绍的是 LeetCode算法题中 Easy级别的第 266题(顺位题号是 1185)。给定日期,返回该日期的星期几。…

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