设计模式在jdk中的应用

原创 2018年04月15日 20:43:49

设计模式在jdk中的应用

在JDK(Java Development Kit)类库中,开发人员使用了大量设计模式。

 

创建型模式:

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

 

结构型模式:

(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.*

 

行为型模式:

(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.Readerjava.io.Writer的所有非抽象方法

java.util.AbstractList, java.util.AbstractSetjava.util.AbstractMap的所有非抽象方法

javax.servlet.http.HttpServlet#doXXX()

 

(11) 访问者模式(Visitor)

javax.lang.model.element.AnnotationValueAnnotationValueVisitor

javax.lang.model.element.ElementElementVisitor

javax.lang.model.type.TypeMirrorTypeVisitor

 

参见:http://www.iteye.com/news/18725http://stackoverflow.com/questions/1673841/examples-of-gof-design-patterns

设计模式在jdk中的应用

在JDK(Java Development Kit)类库中,开发人员使用了大量设计模式。   创建型模式: (1) 抽象工厂模式(Abstract Factory) • jav...
  • u013782203
  • u013782203
  • 2016年08月15日 20:31
  • 1471

设计模式:建造者模式(Builder)

建造者模式:是将一个复杂的对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。  建造者模式通常包括下几个角色: 1. builder(抽象建造者):给出一个抽象结论,以规范产品对象的...
  • u013256816
  • u013256816
  • 2016年03月25日 11:18
  • 2597

JDK源码中使用的设计模式-总结

设计模式分为三大类:创建型模式/结构型模式/行为型模式 一、结构性模式 适配器模式:用来把一个接口转化成另一个接口。例如:Arrays 桥接模式:这个模式将抽象和抽象操作的实现进行了解耦,这样使得抽象...
  • qq_40611359
  • qq_40611359
  • 2017年11月14日 19:11
  • 57

jdk中设计模式的实现

1、创建型设计模式 抽象工厂模式 特点:创建方法返回一个可以用来创建抽象类或接口的工厂类。 javax.xml.parsers.DocumentBuilderFact...
  • qq_22929803
  • qq_22929803
  • 2016年04月22日 21:30
  • 731

【设计模式】JDK源码中用到的设计模式

引入我是从Stack Overflow上看到的问题,感觉这个答案真心不错,所以翻译过来看看,由于本文水平有限,不喜勿喷,原文链接:Examples of GoF Design Patterns in ...
  • baiye_xing
  • baiye_xing
  • 2017年07月31日 13:34
  • 721

【Java基础之二】JDK中使用到的23个经典设计模式

JDK中使用到的23个经典设计模式
  • chj00128
  • chj00128
  • 2016年03月02日 22:00
  • 324

jdk中的23种设计模式体现

[设计模式]JDK中的设计模式 本文主要是归纳了JDK中所包含的设计模式,包括作用和其设计类图。 首先来个总结,具体的某个模式可以一个一个慢慢写,希望能对研究JDK和设计模式有所帮助。 ...
  • likailonghaha
  • likailonghaha
  • 2016年11月16日 19:01
  • 899

JDK与设计模式:组合模式

1、组合模式      组合模式有时又叫部分-整体模式在处理类似树形结构的问题时比较方便,组合多个对象形成树形结构以表示具有“整体—部分”关系的层次结构。组合模式对单个对象(即叶子对象)和组合对象(即...
  • Luckydog1991
  • Luckydog1991
  • 2016年06月18日 09:57
  • 790

中介者模式(java版)

1.引入 中介者模式就是使用一个中介对象来封装各个对象之间的交互。由于使用了中介者对象,那么各个对象之间就不用显式地相互引用了,从而解耦。而我们一般都是直接显式地引用,而中介者模式就是多了中介者对象...
  • ya_1249463314
  • ya_1249463314
  • 2016年09月04日 20:14
  • 404

JDK与设计模式:装饰模式

1、装饰模式       装饰模式可以在不改变一个对象本身功能的基础上给对象增加额外的新行为,是一种用于替代继承的技术,它通过一种无须定义子类的方式来给对象动态增加职责,使用对象之间的关联关系取代类之...
  • Luckydog1991
  • Luckydog1991
  • 2016年06月18日 15:46
  • 676
收藏助手
不良信息举报
您举报文章:设计模式在jdk中的应用
举报原因:
原因补充:

(最多只允许输入30个字)