您的位置 首页 java

Java 源码里的设计模式

从 维基百科 中,可以让你对大部分设计模式有一个概览,而且它也指出了哪些设计模式是 GoF 中规范.下面列出可以从 JavaSE 和 JavaEE API 中找到的设计模式:

.创建型模式

抽象工厂

javax .xml.parsers.DocumentBuilderFactory#newInstance()

javax.xml.transform.TransformerFactory#newInstance()

javax.xml.xpath.XPathFactory#newInstance()

建造者模式

java. lang .StringBuilder# append ()(非同步)

java.lang.StringBuffer#append()(同步)

java.nio.ByteBuffer#put()(类似的还有, CharBuffer, ShortBuffer, IntBuffer, LongBuffer, FloatBuffer 和 DoubleBuffer)

javax. swing .GroupLayout.Group#addComponent()

工厂模式

java.util.Calendar# getInstance ()

java.util.ResourceBundle#getBundle()

java.text.NumberFormat#getInstance()

java.nio.charset.Charset#forName()

java.net.URLStreamHandlerFactory#createURLStreamHandler(String)

原型模式

java.lang.Object#clone()(类需要实现 java.lang.Cloneable 接口)

单例模式

java.lang.Runtime#getRuntime()

java.awt.Desktop#getDesktop()

java.lang.System#getSecurityManager()

.结构型模式

适配器模式

java.util.Arrays#asList()

java. io . InputStream Reader(InputStream) (返回 Reader)

java.io.OutputStreamWriter(OutputStream)(返回 Writer)

javax.xml.bind.annotation.adapters.XmlAdapter#marshal() 和 #unmarshal()

.桥模式

暂时没有发现

.合成模式

java.awt.Container#add(Component)(Swing 中几乎所有类都使用)

javax.faces.component.UIComponent#getChildren()(JSF UI 中几乎所有类都使用)

装饰模式

java.io.InputStream,OutputStream,Reader 和 Writer 的所有资料都有一个使用 InputStream,OutputStream,Reader,Writer 的构造器

java.util.Collections 中的 checkedXXX(), synchronizedXXX() 和 unmodifiableXXX() 方法

javax. servlet .http.HttpServletRequestWrapper 和 HttpServletResponseWrapper

门面模式

javax.faces.context.FacesContext,其内部使用了 LifeCycle, ViewHandler, NavigationHandler 等接口或 抽象类 ,没有这一个门面类,终端就需要考虑如何去使用接口或抽象类(实际上不需要,因为门面类通过反射完成了) javax.faces.context.ExternalContext, 其内部使用了 ServletContext, HttpSession, HttpServletRequest, HttpServletResponse 等

享元模式

java.lang.Integer#valueOf(int),类似得还有 Boolean, Byte, Character, Short 和 Long

代理模式

java.lang.reflect.Proxy

java.rmi.*(所有 api)

.表现型模式

责任链模式

java.util.logging.Logger#log()

javax.servlet. Filter #doFilter()

命令模式

所有 java.lang.Runnable 的实现

所有 javax.swing.Action 的实现

解释器模式

java.util.Pattern

java.text.Normalizer

所有 java.text.Format 的子类

所有 javax.el.ELResolver 的子类

迭代模式

所有 java.util. Iterator 的实现(因此也包含了所有 java.util.Scanner 的子类)

所有 java.util.Enumeration 的实现

中介模式

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

备忘录模式

java.util.Date(setXXX 方法更新的就是其内部的 Date 的值) java.io.Serializable 的所有实现 javax.faces.component.StateHolder 的所有实现

观察者模式(订阅模式)

java.util.Observer/java.util.Observable(实际应用中,很少会用到) java.util.EventListener 的所有实现(几乎包含了所有 Swing 中使用到的类) javax.servlet.http.HttpSessionBindingListener javax.servlet.http.HttpSessionAttributeListener javax.faces.event.PhaseListener

状态模式

javax.faces.lifecycle.LifeCycle#execute()(由FacesServlet控制,行为是依赖于当前JSF生命周期阶段(状态))

策略模式

java.util.Comparator#compare(), 在 Collections#sort() 中会使用到. javax.servlet.http.HttpServlet,service() 和 所有 doXXX() 方法都以 HttpServletRequest 和 HttpServletResponse 作为参数,所有方法的实现都需要显式处理这两个参数(而不是持有这个变量。) javax.servlet.Filter#doFilter()

模板模式

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() 方法,这些方法默认返回 405 “Method Not Allowed” ,你可以自由地选择覆盖实现其中的一个或多个。

访问者模式

javax.lang.model.element.AnnotationValue 和 AnnotationValueVisitor javax.lang.model.element.Element 和 ElementVisitor javax.lang.model.type.TypeMirror 和 TypeVisitor java.nio.file.FileVisitor 和 SimpleFileVisitor

文章来源:智云一二三科技

文章标题:Java 源码里的设计模式

文章地址:https://www.zhihuclub.com/197717.shtml

关于作者: 智云科技

热门文章

网站地图