JDK 中的设计模式应用实例

在 JDK(Java Development Kit)类库中,开发人员使用了大量设计模式,正因为如此,我们可以在不修改 JDK 源码的前提下开发出自己的应用软件。研究 JDK 类库中的模式实例也不失为学习如何使用设计模式的一个好方式。以后用到现在设计模式了自己去看看JDK的源码还是很方便的。

  • 1. 创建型模式:

(1) 抽象工厂模式(Abstract Factory)

? java.util.Calendar#getInstance()

? java.util.Arrays#asList()

? java.util.ResourceBundle#getBundle()

? java.net.URL#openConnection()

? java.sql.DriverManager#getConnection()

? java.sql.Connection#createStatement()

? java.sql.Statement#executeQuery()

? java.text.NumberFormat#getInstance()

? java.lang.management.ManagementFactory (所有 getXXX()方法)

? java.nio.charset.Charset#forName()

? javax.xml.parsers.DocumentBuilderFactory#newInstance()

? javax.xml.transform.TransformerFactory#newInstance()

? javax.xml.xpath.XPathFactory#newInstance()

(2) 建造者模式(Builder)

? java.lang.StringBuilder#append()

? java.lang.StringBuffer#append()

? java.nio.ByteBuffer#put() (CharBuffer, ShortBuffer, IntBuffer,LongBuffer,

FloatBuffer 和 DoubleBuffer 与之类似)

? javax.swing.GroupLayout.Group#addComponent()

? java.sql.PreparedStatement

? java.lang.Appendable 的所有实现类

(3) 工厂方法模式(Factory Method)

? java.lang.Object#toString() (在其子类中可以覆盖该方法)

? java.lang.Class#newInstance()

? java.lang.Integer#valueOf(String) (Boolean, Byte, Character,Short, Long,

Float 和 Double 与之类似)

? java.lang.Class#forName()

? java.lang.reflect.Array#newInstance()

? java.lang.reflect.Constructor#newInstance()

(4) 原型模式(Prototype)

? java.lang.Object#clone() (支持浅克隆的类必须实现 java.lang.Cloneable

接口 )

(5) 单例模式 (Singleton)

? java.lang.Runtime#getRuntime()

? java.awt.Desktop#getDesktop()

  • 2. 结构型模式:

(1) 适配器模式(Adapter)

?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()

(2) 桥接模式(Bridge)

? AWT (提供了抽象层映射于实际的操作系统)

?JDBC

(3) 组合模式(Composite)

?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)

(4) 装饰模式(Decorator)

?java.io.BufferedInputStream(InputStream)

?java.io.DataInputStream(InputStream)

?java.io.BufferedOutputStream(OutputStream)

?java.util.zip.ZipOutputStream(OutputStream)

?java.util.Collections#checked[List|Map|Set|SortedSet|SortedMap]()

(5) 外观模式(Facade)

?java.lang.Class

?javax.faces.webapp.FacesServlet

(6) 享元模式(Flyweight)

?java.lang.Integer#valueOf(int)

?java.lang.Boolean#valueOf(boolean)

? java.lang.Byte#valueOf(byte)

?java.lang.Character#valueOf(char)

(7) 代理模式(Proxy)

? java.lang.reflect.Proxy

?java.rmi.*

3. 行为型模式:

(1) 职责链模式(Chain of Responsibility)

?java.util.logging.Logger#log()

?javax.servlet.Filter#doFilter()

(2) 命令模式(Command)

? java.lang.Runnable

? javax.swing.Action

(3) 解释器模式(Interpreter)

? java.util.Pattern

? java.text.Normalizer

? java.text.Format

? javax.el.ELResolver

(4) 迭代器模式(Iterator)

? java.util.Iterator

? java.util.Enumeration

(5) 中介者模式(Mediator)

? java.util.Timer (所有 scheduleXXX()方法)

? java.util.concurrent.Executor#execute()

? java.util.concurrent.ExecutorService (invokeXXX()和 submit()方法)

? java.util.concurrent.ScheduledExecutorService (所有 scheduleXXX()方

法)

?java.lang.reflect.Method#invoke()

(6) 备忘录模式(Memento)

?java.util.Date

?java.io.Serializable

?javax.faces.component.StateHolder

(7) 观察者模式(Observer)

?java.util.Observer/java.util.Observable

?java.util.EventListener (所有子类)

?javax.servlet.http.HttpSessionBindingListener

?javax.servlet.http.HttpSessionAttributeListener

?javax.faces.event.PhaseListener

(8) 状态模式(State)

?java.util.Iterator

?javax.faces.lifecycle.LifeCycle#execute()

(9) 策略模式(Strategy)

? java.util.Comparator#compare()

? javax.servlet.http.HttpServlet

? javax.servlet.Filter#doFilter()

(10) 模板方法模式(Template Method)

?java.io.InputStream, java.io.OutputStream, java.io.Reader 和 java.io.Writer

的所有非抽象方法

?java.util.AbstractList, java.util.AbstractSet 和 java.util.AbstractMap 的所有

非抽象方法

?javax.servlet.http.HttpServlet#doXXX()

(11) 访问者模式(Visitor)

?javax.lang.model.element.AnnotationValue 和 AnnotationValueVisitor

?javax.lang.model.element.Element 和 ElementVisitor

?javax.lang.model.type.TypeMirror 和 TypeVisitor

时间: 2024-11-08 22:20:51

JDK 中的设计模式应用实例的相关文章

(转载)JDK中的设计模式

写的很好,学习道路更轻松一些 原文地址:http://blog.csdn.net/gtuu0123/article/details/6114197 JDK中设计模式 分类: Java相关 设计模式 2011-01-03 20:42 3550人阅读 评论(6) 收藏 举报 jdk设计模式swingclassloaderdocumentationiterator 本文主要是归纳了JDK中所包含的设计模式,包括作用和其设计类图. 首先来个总结,具体的某个模式可以一个一个慢慢写,希望能对研究JDK和设计

Jdk中的设计模式

转自:http://blog.csdn.net/gtuu0123/article/details/6114197 本文主要是归纳了JDK中所包含的设计模式,包括作用和其设计类图.首先来个总结,具体的某个模式可以一个一个慢慢写,希望能对研究JDK和设计模式有所帮助. 一.设计模式是什么(1)反复出现问题的解决方案(2)增强软件的灵活性(3)适应软件不断变化 二.学习JDK中设计模式的好处(1)借鉴优秀代码的设计,有助于提高代码设计能力(2)JDK的设计中体现了大多数设计模式,是学习设计模式的较好的

初探Java设计模式4:JDK中的设计模式

JDK中设计模式 本文主要是归纳了JDK中所包含的设计模式,包括作用和其设计类图.首先来个总结,具体的某个模式可以一个一个慢慢写,希望能对研究JDK和设计模式有所帮助.一.设计模式是什么(1)反复出现问题的解决方案(2)增强软件的灵活性(3)适应软件不断变化二.学习JDK中设计模式的好处(1)借鉴优秀代码的设计,有助于提高代码设计能力(2)JDK的设计中体现了大多数设计模式,是学习设计模式的较好的方式(3)可以更加深入的了解JDK三.类间关系继承.委托.依赖.聚合.组合?四.介绍方式(1)作用:

详列JDK中的设计模式(一)创建型

1.单例模式(Singleton):只存在一个实例而对外提供公开的访问点 (1)NumnerFormat只有一个实例 (2)Runtime(JVM运行于系统之上,由Runtime可以获取系统的信息):而Runtime是单例的,饿汉式 0.静态工厂(Factory):根据传入方法的参数来构造实例,对外隐藏创建实例的细节 (静态工厂不属于23种设计模式,但此处列举以便理解) (1)Integer.valueOf() Integer类中根据普通类型的值来创建包装类Integer (2)Class.fo

JDK和Spring中的设计模式

创建型 1)工厂方法 Collection.iterator() 由具体的聚集类来确定使用哪一个Iterator 2)单例模式 Runtime.getRuntime() 3)建造者模式 StringBuilder 4)原型模式 Java中的Cloneable 结构性 1)适配器模式 InputStreamReader OutputStreamWriter RunnableAdapter 2)装饰器模式 io包 FileInputStream BufferedInputStream 3)代理模式

深入理解JDK中的I/O

深入理解JDK中的I/O 目 录 java内存模型GCHTTP协议事务隔离级并发多线程设计模式清楚redis.memcache并且知道区别mysql分表分库有接口幂等性了解jdk8稍微了解一下特性 jvm内存模型:堆和非堆,http://www.cnblogs.com/RunForLove/p/4775999.html  对这部分的理解,只集中在关乎我们编程的东西部分. 堆就是Java代码可及的内存,是留给开发人员使用的:非堆就是JVM留给自己用的.堆.非堆:虚拟机栈.本地方法栈.程序计数器.方

JAVA中的饿汉式和饱汉式单例模式及jdk中Runtime类的单例模式实现方式详解

一.描述 单例模式是一种非常常见的设计模式,即一个类只能有一个对象(实例),一般通过将该类的构造器私有化,来阻止在该类外创建该类的对象,并提供给外界一个唯一的对象(这个对象在该类中创建). java中的单例模式常见的有两种实现方式,一种是恶汉方式,即将该类对象用static休息并且在类加载的时候进行初始化:另一种是饱汉方式,在程序中需要用到该对象的时候才初始化,一旦初始化一次就不会再重新生成该对象. JDK中的Runtime类其实也是一种单例模式,而且其采用的是饿汉的方式. 二.源代码 pack

JDK里的设计模式

一.Creational patterns 创建模式 Abstract factory (recognizeable by creational methods returning the factory itself which in turn can be used to create another abstract/interface type) 注意到都是 #newInstance(),一般是这是个静态方法,返回一个类本身的工厂对象.然后这个工厂对象可以去创建其他的抽象类型,最后创建什

【转】Struts2的线程安全 和Struts2中的设计模式----ThreadLocal模式

[转]Struts2的线程安全 和Struts2中的设计模式----ThreadLocal模式 博客分类: 企业应用面临的问题 java并发编程 Struts2的线程安全ThreadLocal模式Struts2调用流程 转载自  http://downpour.iteye.com/blog/1335991 Struts2中的设计模式 设计模式(Design pattern)是经过程序员反复实践后形成的一套代码设计经验的总结.设计模式随着编程语言的发展,也由最初的“编程惯例”逐步发展成为被反复使用