注:本文为译文,原文出处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 和 HttpServletResponseWrapperjavax.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.Proxyjava.rmi.*下所有API.java.util.logging.Logger#log()javax.servlet.Filter#doFilter()java.lang.Runnable的所有实现javax.swing.Action的所有实现java.util.Patternjava.text.Normalizerjava.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.HttpSessionBindingListenerjavax.servlet.http.HttpSessionAttributeListenerjavax.faces.event.PhaseListenerjavax.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 和 AnnotationValueVisitorjavax.lang.model.element.Element 和 ElementVisitorjavax.lang.model.type.TypeMirror 和 TypeVisitor