1)抽象工厂
javax.xml.parsers.DocumentBuilderFactory抽象类
public static DocumentBuilderFactory newInstance()方法
类功能:使得应用程序可以通过XML文件,获得一个能生成DOM对象的解析器。
方法功能:获取一个DocumentBuilderFactory的新实例。这一静态方法会创建一个新的工厂实例。
2)建造者模式
java.lang.StringBuilder,这是一个final类。
public StringBuilder append(String str)方法,这一方法是对父类的覆写。
类功能:用于一个不可更改的字符序列。
方法功能:根据现有字符序列和追加字符,通过系统拷贝方法System.arraycopy生成一个新的字符序列。
DocumentBuilder(org.w3c.dom)
类图:
3)工厂模式
java.text.NumberFormat抽象类。
public final static NumberFormat getInstance()方法。
类功能:用于数字格式的抽象基类。
方法功能:返回一个“对当前默认场景下的一个通用数字格式”的NumberFormat。显然属于工厂模式的使用。
静态工厂
作用:
- 代替构造函数创造对象
- 方法名比构造函数清晰
JDK中体现:
- Integer.valueOf
- Class.forName
类图:
工厂方法
作用:
- 子类决定哪一个类实例化
JDK中体现:
- Collection.iterator方法
类图:
4)原型模式
java.lang.Object
protected native Object clone() 方法
类功能:所有类的父类
方法功能:根据现有实例,返回一个浅拷贝对象。
5)单例模式
java.lang.RunTime类
public static Runtime getRuntime()
类功能:每一个运行的java应用都会有一个唯一的RunTime类的实例,这个实例使得应用程序在运行期间能够受到运行环境的影响。
方法功能:返回一个和当前java应用关联的RunTime对象。
6)适配器模式
java.util.Arrays。
public static List asList(T… a)方法。
类功能:此类包含了大量对数组操作的方法。
方法功能:将一个引用类型的数组转为一个List。从而可以使用List类的操作来操作数组对象,但是有一点要注意:就是不能使用add(),remove()操作,因为返回的list底层是基于数组的,数组结构是不能更改的。 list类就是这里的适配器,通过这个适配器,对数组的直接操作变为间接操作。
作用:
- 使不兼容的接口相容
JDK中体现:
- java.io.InputStreamReader(InputStream)
- java.io.OutputStreamWriter(OutputStream)
类图:
7)桥梁模式
作用:
- 将抽象部分与其实现部分分离,使它们都可以独立地变化
JDK中体现:
- java.util.logging中的Handler和Formatter
类图:
8)组合模式
作用:
- 一致地对待组合对象和独立对象
JDK中体现:
- org.w3c.dom
- javax.swing.JComponent#add(Component)
类图:
9)装饰者模式
作用:
- 为类添加新的功能;防止类继承带来的爆炸式增长
JDK中体现:
- java.io包
- java.util.Collections#synchronizedList(List)
类图:
10)外观模式
作用:
- 封装一组交互类,一致地对外提供接口
- 封装子系统,简化子系统调用
JDK中体现:
- java.util.logging包
类图:
11)享元模式
作用:
- 共享对象,节省内存
JDK中体现:
- Integer.valueOf(int i);Character.valueOf(char c)
- String常量池
类图:
12)代理模式
作用:
- 透明调用被代理对象,无须知道复杂实现细节
- 增加被代理类的功能
JDK中体现:
- 动态代理
- RMI
类图:
13)迭代器模式
作用:
- 将集合的迭代和集合本身分离
JDK中体现:
- Iterator、Enumeration接口
类图:
14)观察者模式
作用:
- 通知对象状态改变
JDK中体现:
- java.util.Observer,Observable
- Swing中的Listener
类图:
15)模板方法模式
作用:
- 定义算法的结构,子类只实现不同的部分
JDK中体现:
- ThreadPoolExecutor.Worker
类图:
![]()
16)策略模式
作用:
- 提供不同的算法
JDK中的体现:
- ThreadPoolExecutor中的四种拒绝策略
类图:
![]()
17)责任链模式
作用:
- 请求会被链上的对象处理,但是客户端不知道请求会被哪些对象处理
JDK中体现:
- java.util.logging.Logger会将log委托给parent logger
- ClassLoader的委托模型
类图:
![]()
18)命令模式
作用:
- 封装操作,使接口一致
- 将调用者和接收者在空间和时间上解耦合
JDK中体现:
- Runnable
- Callable
- ThreadPoolExecutor
类图:
![]()
19)状态模式
作用:
- 将主对象和其状态分离,状态对象负责主对象的状态转换,使主对象类功能减轻
JDK中体现:
- 未发现
类图:
知识来源:马士兵教育
Java基础(二十二)——JDK中的设计模式(各设计模式的作用,jdk中的体现)_jdk设计模式应用场景_我爱豆子的博客-CSDN博客