在Java JDK(Java Development Kit)中有很多模式,了解一些对程序设计会非常有益,以下是一些在JDK中常见的设计模式体现的示例:
1.工厂模式(Factory Pattern):
- JDK中的
java.util.Calendar
类就是一个典型的工厂模式的例子。它提供了静态工厂方法getInstance()
来获取特定类型的日历实例,根据用户的默认或指定语言环境创建相应的日历实现,隐藏了创建不同日历类型的具体实现细节,如getInstance(TimeZone zone, Locale aLocale)
。 java.text.NumberFormat
类也是一个抽象工厂模式的例子,它提供了多种数字格式化的实现。静态方法getNumberInstance()
、getCurrencyInstance()
和getPercentInstance()
,根据参数的不同返回适合格式化数字、货币或百分比的不同类型的NumberFormat
实例。
2.单例模式(Singleton Pattern):
- JDK中的
java.lang.Runtime
类就是一个单例模式的例子。它提供了静态方法getRuntime()
来获取唯一的Runtime
实例,使得应用程序能够在运行时环境中受到运行环境的影响。
3.观察者模式(Observer Pattern):
- JDK中的
java.util.Observable
类和java.util.Observer
接口是实现观察者模式的例子。当一个对象的状态发生变化时,它可以通知所有依赖它的观察者对象。 - Java Swing UI 框架中大量使用了观察者模式,例如
java.util.EventListener
和它的子接口(如MouseListener
,KeyListener
等),通过注册监听器到事件源(如JButton
或JTable
)来响应特定的事件。
3.适配器模式(Adapter Pattern):
- JDK中的
java.util.Arrays
类中的asList()
方法就是一个适配器模式的例子。它可以将一个数组适配为一个列表(List
),使得数组可以像列表一样被使用。 java.io.InputStreamReader
和java.io.OutputStreamWriter
类将字节流(如InputStream
和OutputStream
)适配为字符流(如Reader
和Writer
),从而透明地处理字符编码转换。
4.装饰器模式(Decorator Pattern):
- JDK中的I/O流体系就是一个装饰器模式的例子。例如,
BufferedInputStream
类就是InputStream
的一个装饰器,它为InputStream
提供了缓冲功能。 - Java IO 包中的流类体系,如
BufferedReader
装饰Reader
,提供了缓冲功能,而没有修改基础类的接口。
5.策略模式(Strategy Pattern):
- JDK中的
java.util.Comparator
接口和Collections.sort()
方法是一个策略模式的例子。通过传递不同的Comparator
实现,可以定制排序策略。
6.模板方法模式(Template Method Pattern):
- JDK中的
java.io.Writer
类中的write()
方法就是一个模板方法模式的例子。它定义了写入字符的基本流程,但具体的实现细节(如何写入)留给子类去实现。
7.建造者模式(Builder)
- 示例:
java.lang.StringBuilder
或java.lang.StringBuffer
类的append()
系列方法,允许逐步构建字符串对象,同时避免频繁的字符串拼接带来的性能损失。
8.原型模式(Prototype)
- 任何实现了
java.lang.Cloneable
接口的类都可以通过Object#clone()
方法复制自身,但需要注意的是,Java中的clone()
方法实现的是浅拷贝,若需深拷贝需要自己覆盖此方法并处理引用对象的复制。