策略模式在JDK 源码中的体现
首先来看一个比较常用的比较器Comparator 接口,我们看到的一个大家常用的compare()方法,就是一个策略抽象实现:
Comparator 抽象下面有非常多的实现类,我们经常会把Comparator 作为参数传入作为排序策略,例如Arrays 类的parallelSort 方法等:
还有TreeMap 的构造方法:
是Comparator 在JDK 源码中的应用。那我们来看策略模式在Spring 源码中的应用,来看Resource 类:package org.springframework.core.
我们虽然没有直接使用Resource 类,但是我们经常使用它的子类,例如:
还有一个非常典型的场景,Spring 的初始化也采用了策略模式,不同的类型的类采用不同的初始化策略。首先有一个InstantiationStrategy 接口,我们来看一下源码:
顶层的策略抽象非常简单,但是它下面有两种策略SimpleInstantiationStrategy 和CglibSubclassingInstantiationStrategy,我们看一下类图:
打开类图我们还发现CglibSubclassingInstantiationStrategy 策略类还继承了SimpleInstantiationStrategy 类,说明在实际应用中多种策略之间还可以继承使用。小伙们可以作为一个参考,在实际业务场景中,可以根据需要来设计。
策略模式在JDK 源码中的体现相关推荐
- 享元模式在JDK源码中的应用——Java设计模式系列学习笔记
1. String中的享元模式 Java中将String类定义为final(不可改变的),JVM中字符串一般保存在字符串常量池中,java会确保一个字符串在常量池中只有一个拷贝,这个字符串常量池在JD ...
- 【设计模式系列20】解释器模式原理及其在JDK和Spring源码中的体现
解释器模式原理及其在JDK源码中的体现 设计模式系列总览 前言 什么是解释器模式 终结符表达式和非终结符表达式 解释器模式示例 解释器模式角色 解释器模式在JDK和Spring源码中应用 解释器模式应 ...
- 17.你知道哪些设计模式,它们在JDK源码中是怎么体现的
17.你知道哪些设计模式,它们在JDK源码中是怎么体现的 参考外国文献:http://h5ip.cn/lPtD 作者:肥朝 | 微信公众号:肥朝(ID:feichao_java) 一.结构性模式: 1 ...
- 设置Eclipse可以Debug模式调试JDK源码,并显示局部变量的值
最近突然萌发了研究JDK源码的想法,所以就想到了在自己常用的Eclipse上可以调试JDK源码. 整个设置过程也很简单: 首先你要安装好JDK(我的JDK安装路径根目录是D:\Java\jdk-8u9 ...
- Redis源码和java jdk源码中hashcode的不同实现
一.redis实际上是使用了siphash 这个比较简单,我说的简单是指redis代码比较少不像jdk一样调用C++代码调用栈非常深. 先看这个rehashing.c 主要就是dictKeyHash函 ...
- JDK源码中,都有哪些NB的设计模式?
参考外国文献:http://h5ip.cn/lPtD 作者:肥朝 | 微信公众号:肥朝(ID:feichao_java) 一.结构性模式: 1.适配器模式: 常用于将一个新接口适配旧接口 肥朝小声逼逼 ...
- JDK源码中,都有哪些设计模式
文章转自微信公众号:肥朝(ID:feichao_java) 一.结构性模式: 1.适配器模式: 常用于将一个新接口适配旧接口 肥朝小声逼逼:在我们业务代码中经常有新旧接口适配需求,可以采用该模式. 2 ...
- 模板模式在源码中的体现
先来看JDK 中的AbstractList,来看代码: public abstract class AbstractList<E> extends AbstractCollection&l ...
- 如何优雅的创建一个Java不可变对象类,JDK源码中也是这么干的!
前面有篇文章当介绍了Java的不可变对象的一些特性,以及它的一些好处,但是并没有介绍如何实现一个不可变对象类.今天就来看看如何实现一个不可变对象类. Java中常用的不可变对象类 String类应该是 ...
最新文章
- hashmap的五种便利方式
- Java十个数比大小循环_java for循环完成输出(1,1,2,3,5,8,13,21,34...)求出第10个数是多少?...
- Echarts开源可视化库学习(三)主题的使用
- ASP.NET Core on K8S深入学习(3)Deployment
- 2021牛客暑期多校训练营1 I-Increasing Subsequence(期望dp+优化)
- Android笔记-Activity相关+内存泄漏
- ICCV2021 微软CMU提出TACo:同时用三个损失函数进行多模态对齐!性能SOTA!
- MTK:BMT充电模块
- HDU2001 计算两点间的距离【入门】
- 【边缘检测】基于matlab蚁群算法图像边缘检测【含Matlab源码 1189期】
- 一图掌握ICT项目管理流程图「实例」
- win7录屏_win7/win10屏幕录制教程?
- 期望和方差的定义与性质
- 如何在IDM中设置代理服务器
- 程序使用微软雅黑作为默认字体在xp下的问题
- 当年“你说什么,我都能实现”的软件公司,后来都是怎么死的?
- android 充电模式deamon_它是首款无线充电手机,也是雷军十年前的最爱|极客博物馆...
- sapi/cgi/php-cgi,sapi/cgi/php-cgi
- jQuery基础(菜鸟教程,建议收藏不然怕你后悔!)
- echarts图表动态化