最近读一篇技术文档,归纳一些常见知识点。Design Patterns in the JDK
结构型模式
适配器模式
java.util.Arrays#asList() javax.swing.JTable(TableModel) java.io.InputStreamReader(InputStream) java.io.OutputStreamWriter(OutputStream) javax.xml.bind.annotation.adapters.XmlAdapter#marshal() javax.xml.bind.annotation.adapters.XmlAdapter#unmarshal()
桥接模式
桥接模式将首抽象和抽象操作的实现进行了解耦,这样使得抽象和实现可以独立地变化。
- JDBC
- AWT (It provides an abstraction layer which maps onto the native OS the windowing support)
组合模式
使得客户端看来单个对象和对象的组合是同等的。换句话说,某个类型的方法同时也接受自身类型作为参数。
javax.swing.JComponent#add(Component) java.awt.Container#add(Component) java.util.Map#putAll(Map) java.util.List#addAll(Collection) java.util.Set#addAll(Collection)
装饰器模式
动态的给一个对象附加额外的功能,这也是子类的一种替代方式。可以看到,在创建一个类型的时候,同时也传入统一类型的对象。
java.io.BufferedInputStream(InputStream) java.io.DataInputStream(InputStream) java.io.BufferedOutputStream(OutputStream) java.util.zip.ZipOutputStream(OutputStream) java.util.Collections#checkedList|Map|Set|SortedSet|SortedMap
门面模式
给一组组件,接口,抽象,或者子系统提供一个简单的接口
java.lang.Class javax.faces.webapp.FacesServlet
代理模式
代理模式是用一个简单的对象来代替一个复杂的或者创建耗时的对象
java.lang.reflect.Proxy RMI
创建模式
抽象工厂模式
抽象工厂模式提供了一个协议来生成一系列的相关或者独立的对象,而不用指定具体对象的类型。它使得应用程序能够和使用的框架的具体实现进行解耦。 这在JDK或者许多框架比如Spring中都随处可见。它们也很容易识别,一个创建新对象的方法,返回的却是接口或者抽象类的,就是抽象工厂模式了。
java.util.Calendar#getInstance() java.util.Arrays#asList() java.util.ResourceBundle#getBundle() java.sql.DriverManager#getConnection() java.sql.Connection#createStatement() java.sql.Statement#executeQuery() java.text.NumberFormat#getInstance() javax.xml.transform.TransformerFactory#newInstance()
建造模式(Builder)
定义了一个新的类来构建另一个类的实例,以简化复杂对象的创建。建造模式通常也使用方法链接来实现。
java.lang.StringBuilder#append() java.lang.StringBuffer#append() java.sql.PreparedStatement javax.swing.GroupLayout.Group#addComponent()
单例模式
用来确保类只有一个实例。Joshua Bloch在Effetive Java中建议到,还有一种方法就是使用枚举。
java.lang.Runtime#getRuntime() java.awt.Toolkit#getDefaultToolkit() java.awt.GraphicsEnvironment#getLocalGraphicsEnvironment() java.awt.Desktop#getDesktop()
public class SingletonTest { // 定义一个私有的构造方法 private SingletonTest() { } // 将自身的实例对象设置为一个属性,并加上Static和final修饰符 private static final SingletonTest instance = new SingletonTest(); // 静态方法返回该类的实例 public static SingletonTest getInstancei() { return instance; } }
迭代器模式
提供一个一致的方法来顺序访问集合中的对象,这个方法与底层的集合的具体实现无关。
java.util.Iterator java.util.Enumeration? ?Next post Java优化变长参数 ? ?Previous post JVM知识点
原文:大专栏 JDK中设计模式
精彩评论