1. Spring 中用到的设计模式
工厂模式:在各种BeanFactory以及ApplicationContext创建中都用到了。
模板模式:在各种BeanFactory以及ApplicationContext实现中用到了。
代理模式:在AOP实现中用到了JDK的动态代理。
单例模式:在创建bean的时候。
外观模式:Tomcat中有很多场景都使用到了外观模式,因为Tomcat中有很多不同的组件,每个组件需要相互通信,但又不能将自己内部数据过多地暴露给其他组件。用外观模式隔离数据是个很好的方法。
策略模式:在Java中的应用,这个太明显了,因为Comparator这个接口简直就是为策略模式而生的。Java要求如果定义的复合对象要有排序的功能,就自行实现Comparable接口或Comparator接口
原型模式:使用原型模式创建对象比直接new一个对象在性能上好得多,因为Object类的clone()方法是一个native方法,它直接操作内存中的二进制流,特别是复制大对象时,性能的差别非常明显。
迭代器模式:Iterable接口和Iterator接口 这两个都是迭代相关的接口,可以这么认为,实现了Iterable接口,则表示某个对象是可被迭代的;Iterator接口相当于是一个迭代器,实现了Iterator接口,等于具体定义了这个可被迭代的对象时如何进行迭代的
2. 单例模式
某个类同时保留一个对象,不希望有更多的对象。
实现:
3. 工厂模式
为创建对象提供过渡接口,以便将创建对象的过程屏蔽起来,达到提高灵活性的目的。
分为简单工厂模式、工厂方法模式、抽象工厂模式。简单工厂模式是由一个具体的类去创建其他类的实例,父类是相同的,父类是具体的(switch case);工厂方法模式是由一个具体的父类定义公共的接口,子类负责生成具体的对象,实例化操作延迟到子类中完成;
抽象工厂模式提供一个创建一系列相关或相互依赖对象的接口,而无须指定他们具体的类。
简单工厂模式:
工厂方法模式:
抽象工厂模式:
4. 观察者模式
在对象之间定义了一对多的依赖,当一个对象改变状态,依赖它的对象会收到通知并自动更新。其实就是发布订阅模式,发布者发布信息,订阅者获取信息,订阅了就能收到信息,没订阅就收不到信息。
5. 代理模式
代理模式提供了对目标对象另外的访问方式,即通过代理对象访问目标对象,这样做的好处是可以在目标对象实现的基础上,增强额外的功能操作,即拓展目标对象的功能。
6. 建造者模式
是一种对象构建的设计模式,它可以将复杂对象的建造过程抽象出来,使这个抽象过程的不同实现方法可以构造出不同的表现的对象。一步一步创建一个复杂的对象。
7. 适配器模式
适配器模式把一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作。