首先来看一个比较常用的比较器Comparator 接口,我们看到的一个大家常用的compare()方法,就是一个策略抽象实现:

Comparator 抽象下面有非常多的实现类,我们经常会把Comparator 作为参数传入作为排序策略,例如Arrays 类的parallelSort 方法等:

还有TreeMap 的构造方法:

是Comparator 在JDK 源码中的应用。那我们来看策略模式在Spring 源码中的应用,来看Resource 类:package org.springframework.core.

我们虽然没有直接使用Resource 类,但是我们经常使用它的子类,例如:

还有一个非常典型的场景,Spring 的初始化也采用了策略模式,不同的类型的类采用不同的初始化策略。首先有一个InstantiationStrategy 接口,我们来看一下源码:

顶层的策略抽象非常简单,但是它下面有两种策略SimpleInstantiationStrategy 和CglibSubclassingInstantiationStrategy,我们看一下类图:

打开类图我们还发现CglibSubclassingInstantiationStrategy 策略类还继承了SimpleInstantiationStrategy 类,说明在实际应用中多种策略之间还可以继承使用。小伙们可以作为一个参考,在实际业务场景中,可以根据需要来设计。

策略模式在JDK 源码中的体现相关推荐

  1. 享元模式在JDK源码中的应用——Java设计模式系列学习笔记

    1. String中的享元模式 Java中将String类定义为final(不可改变的),JVM中字符串一般保存在字符串常量池中,java会确保一个字符串在常量池中只有一个拷贝,这个字符串常量池在JD ...

  2. 【设计模式系列20】解释器模式原理及其在JDK和Spring源码中的体现

    解释器模式原理及其在JDK源码中的体现 设计模式系列总览 前言 什么是解释器模式 终结符表达式和非终结符表达式 解释器模式示例 解释器模式角色 解释器模式在JDK和Spring源码中应用 解释器模式应 ...

  3. 17.你知道哪些设计模式,它们在JDK源码中是怎么体现的

    17.你知道哪些设计模式,它们在JDK源码中是怎么体现的 参考外国文献:http://h5ip.cn/lPtD 作者:肥朝 | 微信公众号:肥朝(ID:feichao_java) 一.结构性模式: 1 ...

  4. 设置Eclipse可以Debug模式调试JDK源码,并显示局部变量的值

    最近突然萌发了研究JDK源码的想法,所以就想到了在自己常用的Eclipse上可以调试JDK源码. 整个设置过程也很简单: 首先你要安装好JDK(我的JDK安装路径根目录是D:\Java\jdk-8u9 ...

  5. Redis源码和java jdk源码中hashcode的不同实现

    一.redis实际上是使用了siphash 这个比较简单,我说的简单是指redis代码比较少不像jdk一样调用C++代码调用栈非常深. 先看这个rehashing.c 主要就是dictKeyHash函 ...

  6. JDK源码中,都有哪些NB的设计模式?

    参考外国文献:http://h5ip.cn/lPtD 作者:肥朝 | 微信公众号:肥朝(ID:feichao_java) 一.结构性模式: 1.适配器模式: 常用于将一个新接口适配旧接口 肥朝小声逼逼 ...

  7. JDK源码中,都有哪些设计模式

    文章转自微信公众号:肥朝(ID:feichao_java) 一.结构性模式: 1.适配器模式: 常用于将一个新接口适配旧接口 肥朝小声逼逼:在我们业务代码中经常有新旧接口适配需求,可以采用该模式. 2 ...

  8. 模板模式在源码中的体现

    先来看JDK 中的AbstractList,来看代码: public abstract class AbstractList<E> extends AbstractCollection&l ...

  9. 如何优雅的创建一个Java不可变对象类,JDK源码中也是这么干的!

    前面有篇文章当介绍了Java的不可变对象的一些特性,以及它的一些好处,但是并没有介绍如何实现一个不可变对象类.今天就来看看如何实现一个不可变对象类. Java中常用的不可变对象类 String类应该是 ...

最新文章

  1. hashmap的五种便利方式
  2. Java十个数比大小循环_java for循环完成输出(1,1,2,3,5,8,13,21,34...)求出第10个数是多少?...
  3. Echarts开源可视化库学习(三)主题的使用
  4. ASP.NET Core on K8S深入学习(3)Deployment
  5. 2021牛客暑期多校训练营1 I-Increasing Subsequence(期望dp+优化)
  6. Android笔记-Activity相关+内存泄漏
  7. ICCV2021 微软CMU提出TACo:同时用三个损失函数进行多模态对齐!性能SOTA!
  8. MTK:BMT充电模块
  9. HDU2001 计算两点间的距离【入门】
  10. 【边缘检测】基于matlab蚁群算法图像边缘检测【含Matlab源码 1189期】
  11. 一图掌握ICT项目管理流程图「实例」
  12. win7录屏_win7/win10屏幕录制教程?
  13. 期望和方差的定义与性质
  14. 如何在IDM中设置代理服务器
  15. 程序使用微软雅黑作为默认字体在xp下的问题
  16. 当年“你说什么,我都能实现”的软件公司,后来都是怎么死的?
  17. android 充电模式deamon_它是首款无线充电手机,也是雷军十年前的最爱|极客博物馆...
  18. sapi/cgi/php-cgi,sapi/cgi/php-cgi
  19. jQuery基础(菜鸟教程,建议收藏不然怕你后悔!)
  20. echarts图表动态化

热门文章

  1. 【python】dist-packages和site-packages的区别
  2. 鲁棒性、稳定性、非脆弱性
  3. ubuntu 安装自动解决依赖冲突
  4. FZU 2150 Fire Game bfs
  5. 密钥登陆Linux服务器
  6. [Leetcode] Binary Tree Maximum Path Sum
  7. 将switch case转为条件驱动
  8. 在springboot中使用springsecurity实现安全控制
  9. Linux Shell 快捷键
  10. 当try,catch,finally中均有return语句时,会返回哪一个?---finally中的return