本文摘自:Examples of GoF Design Patterns
javax.xml.parsers.DocumentBuilderFactory#newInstance()javax.xml.transform.TransformerFactory#newInstance()javax.xml.xpath.XPathFactory#newInstance()java.lang.StringBuilder#append() (unsynchronized)java.lang.StringBuffer#append() (synchronized)java.nio.ByteBuffer#put() (also on CharBuffer, ShortBuffer, IntBuffer, LongBuffer, FloatBuffer and DoubleBuffer)javax.swing.GroupLayout.Group#addComponent()java.lang.Appendablejava.util.Calendar#getInstance()java.util.ResourceBundle#getBundle()java.text.NumberFormat#getInstance()java.nio.charset.Charset#forName()java.net.URLStreamHandlerFactory#createURLStreamHandler(String) (Returns singleton object per protocol)java.lang.Object#clone() (the class has to implement java.lang.Cloneable)java.util.Arrays#asList()java.io.InputStreamReader(InputStream) (returns a Reader)java.io.OutputStreamWriter(OutputStream) (returns a Writer)javax.xml.bind.annotation.adapters.XmlAdapter#marshal() and #unmarshal()new LinkedHashMap(LinkedHashSet<K>, List<V>) which returns an unmodifiable linked map which doesn't clone the items, but uses them. The java.util.Collections#newSetFromMap() and singletonXXX() methods however comes close.java.awt.Container#add(Component) (practically all over Swing thus)javax.faces.component.UIComponent#getChildren() (practically all over JSF UI thus)java.io.InputStream, OutputStream, Reader and Writer have a constructor taking an instance of same type.java.util.Collections, the checkedXXX(), synchronizedXXX() and unmodifiableXXX() methods.javax.servlet.http.HttpServletRequestWrapper and HttpServletResponseWrapperjavax.faces.context.FacesContext, it internally uses among others the abstract/interface types LifeCycle, ViewHandler, NavigationHandler and many more without that the enduser has to worry about it (which are however overrideable by injection).javax.faces.context.ExternalContext, which internally uses ServletContext, HttpSession, HttpServletRequest, HttpServletResponse, etc.java.lang.reflect.Proxyjava.rmi.*, the whole API actually.The Wikipedia example is IMHO a bit poor, lazy loading has actually completely nothing to do with the proxy pattern at all.
java.lang.Runnablejavax.swing.Actionjava.util.Patternjava.text.Normalizerjava.text.Formatjavax.el.ELResolverjava.util.Iterator (thus among others also java.util.Scanner!).java.util.Enumerationjava.util.Timer (all scheduleXXX() methods)java.util.concurrent.Executor#execute()java.util.concurrent.ExecutorService (the invokeXXX() and submit() methods)java.util.concurrent.ScheduledExecutorService (all scheduleXXX() methods)java.lang.reflect.Method#invoke()java.util.Date (the setter methods do that, Date is internally represented by a long value)java.io.Serializablejavax.faces.component.StateHolderjava.util.Observer/java.util.Observable (rarely used in real world though)java.util.EventListener (practically all over Swing thus)javax.servlet.http.HttpSessionBindingListenerjavax.servlet.http.HttpSessionAttributeListenerjavax.faces.event.PhaseListenerjavax.faces.lifecycle.LifeCycle#execute() (controlled by FacesServlet, the behaviour is dependent on current phase (state) of JSF lifecycle)java.util.Comparator#compare(), executed by among others Collections#sort().javax.servlet.http.HttpServlet, the service() and all doXXX() methods take HttpServletRequest and HttpServletResponse and the implementor has to process them (and not to get hold of them as instance variables!).javax.servlet.Filter#doFilter()java.io.InputStream, java.io.OutputStream, java.io.Reader and java.io.Writer.java.util.AbstractList, java.util.AbstractSet and java.util.AbstractMap.javax.servlet.http.HttpServlet, all the doXXX() methods by default sends a HTTP 405 "Method Not Allowed" error to the response. You're free to implement none or any of them.