工厂模式
这个很明显,在各种BeanFactory以及ApplicationContext创建中都用到了
模板模式
在各种BeanFactory以及Application实现中也都用到了
代理模式
在Aop实现中用到了JDK的动态代理
单例模式
在创建Bean的时候
外观模式
Tomcat中有很多场景用到了外观模式,因为Tomcat有很多不同的组件,每个组件需要相互通信,但又不能把自己内部数据过多地暴露给其他组件,用外观模式隔离数据是个很好的方法
策略模式
在Java中的应用,这个太明显了,因为Comparator这个接口简直就是为策略模式而生的。比如Collection中的sort方法,因为集合中的元素可能是符合对象,符合对象不像基本数据类型,可以根据大小排序。符合对象怎么排序呢?基于这个问题考虑,java要求定义的对象要有排序的功能,就自行实现Comparable接口或Comparator接口
原型模式
使用原型模式创建对象比直接new一个对象在性能上好的多,因为Object类的clone()方法是一个native方法,它能操作内存中的二进制流,特别是复制大对象时,性能的差别非常明显。
迭代器模式
Iterable接口和Iterator接口这两个都是迭代相关的接口,可以这么认为,实现了Iterator接口,则表示某个对象是可迭代的;Iterator接口相当于是一个迭代器,实现了Iterator接口,等于具体定义了这个可被迭代的对象是如何进行迭代的