注:本文为译文,原文出处java-design-patterns-in-stories
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.lang.Appendabled
的所有实现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.util.Arrays#asList()
java.io.InputStreamReader(InputStream)
(返回一个Reader
)java.io.OutputStreamWriter(OutputStream)
(返回一个Writer
)javax.xml.bind.annotation.adapters.XmlAdapter#marshal()
和 #unmarshal()
new LinkedHashMap(LinkedHashSet<K>, List<V>)
返回一个不可变的链式map
, 并且不会克隆内部元素而是直接使用他们. java.util.Collections#newSetFromMap()
和 singletonXXX()
方法是有些接近这个模式的.java.awt.Container#add(Component)
(几乎所有Swing
都是这样)javax.faces.component.UIComponent#getChildren()
(几乎所有JSF UI都是这样)java.io.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
( setter 方法就是这么做的, Date
内部通过长整型long
表示)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()
方法默认发送 HTTP 405 "Method Not Allowed"
错误到响应中. 你可以任意实现这些方法.javax.lang.model.element.AnnotationValue
和 AnnotationValueVisitor
javax.lang.model.element.Element
和 ElementVisitor
javax.lang.model.type.TypeMirror
和 TypeVisitor