请列举出在JDK中几个常用的设计模式?
单例模式
作用:保证类只有一个实例。
JDK中体现:Runtime类。
静态工厂模式
作用:代替构造函数创建对象,方法名比构造函数清晰。
JDK中体现:Integer.valueOf、Class.forName
抽象工厂
作用:创建某一种类的对象。
JDK中体现:Java.sql包。
原型模式
clone();
原型模式的本质是拷贝原型来创建新的对象,拷贝是比new更快的创建对象的方法,当需要大批量创建新对象而且都是同一个类的对象的时候考虑使用原型模式。
一般的克隆只是浅拷贝(对象的hash值不一样,但是对象里面的成员变量的hash值是一样的)。
有些场景需要深拷贝,这时我们就要重写clone方法,以ArrayList为例:
适配器模式
作用:使不兼容的接口相容。
JDK中体现:InputStream、OutputStream。
装饰器模式
作用:为类添加新的功能,防止类继承带来的类爆炸。
JDK中体现:io类、Collections、List。
外观模式
作用:封装一组交互类,一直对外提供接口。
JDK中体现:logging包。
享元模式
作用:共享对象、节省内存。
JDK中体现:Integer.valueOf、String常量池。
代理模式
作用:
(1)透明调用被代理对象,无须知道复杂实现细节;
(2)增加被代理类的功能;
JDK中体现:动态代理。
迭代器模式
作用:将集合的迭代和集合本身分离。
JDK中体现:Iterator
命令模式
作用:封装操作,使接口一致。
JDK中体现:Runable、Callable、ThreadPoolExecutor。