Respuestas:
Puede encontrar una descripción general de muchos patrones de diseño en Wikipedia . También menciona qué patrones son mencionados por GoF. Los resumiré aquí e intentaré asignar tantas implementaciones de patrones como sea posible, que se encuentran en las API Java SE y Java EE.
javax.xml.parsers.DocumentBuilderFactory#newInstance()
javax.xml.transform.TransformerFactory#newInstance()
javax.xml.xpath.XPathFactory#newInstance()
java.lang.StringBuilder#append()
(no sincronizado)java.lang.StringBuffer#append()
(sincronizado)java.nio.ByteBuffer#put()
(también en CharBuffer
, ShortBuffer
, IntBuffer
, LongBuffer
, FloatBuffer
y DoubleBuffer
)javax.swing.GroupLayout.Group#addComponent()
java.lang.Appendable
java.util.stream.Stream.Builder
java.util.Calendar#getInstance()
java.util.ResourceBundle#getBundle()
java.text.NumberFormat#getInstance()
java.nio.charset.Charset#forName()
java.net.URLStreamHandlerFactory#createURLStreamHandler(String)
(Devuelve objeto singleton por protocolo)java.util.EnumSet#of()
javax.xml.bind.JAXBContext#createMarshaller()
y otros métodos similaresjava.lang.Object#clone()
(la clase tiene que implementar java.lang.Cloneable
)java.util.Arrays#asList()
java.util.Collections#list()
java.util.Collections#enumeration()
java.io.InputStreamReader(InputStream)
(devuelve a Reader
)java.io.OutputStreamWriter(OutputStream)
(devuelve a Writer
)javax.xml.bind.annotation.adapters.XmlAdapter#marshal()
y #unmarshal()
new LinkedHashMap(LinkedHashSet<K>, List<V>)
que devuelve un mapa vinculado no modificable que no clona los elementos, sino que los usa . El java.util.Collections#newSetFromMap()
y singletonXXX()
métodos, sin embargo se le acerca.java.awt.Container#add(Component)
(prácticamente en todo Swing así)javax.faces.component.UIComponent#getChildren()
(prácticamente en toda la interfaz de usuario JSF)java.io.InputStream
, OutputStream
, Reader
y Writer
tienen un constructor teniendo una instancia del mismo tipo.java.util.Collections
, el checkedXXX()
, synchronizedXXX()
y los unmodifiableXXX()
métodos.javax.servlet.http.HttpServletRequestWrapper
y HttpServletResponseWrapper
javax.swing.JScrollPane
javax.faces.context.FacesContext
, Que utiliza internamente entre otros los tipos de interfaz / abstractos LifeCycle
, ViewHandler
, NavigationHandler
y muchos más, sin que el usuario final tiene que preocuparse por ello (que son sin embargo overrideable por inyección).javax.faces.context.ExternalContext
, Que utiliza internamente ServletContext
, HttpSession
, HttpServletRequest
, HttpServletResponse
, etc.java.lang.Integer#valueOf(int)
(también en Boolean
, Byte
, Character
, Short
, Long
y BigDecimal
)java.lang.reflect.Proxy
java.rmi.*
javax.ejb.EJB
( explicación aquí )javax.inject.Inject
( explicación aquí )javax.persistence.PersistenceContext
java.lang.Runnable
javax.swing.Action
java.util.Pattern
java.text.Normalizer
java.text.Format
javax.el.ELResolver
java.util.Iterator
(¡y entre otras también java.util.Scanner
!).java.util.Enumeration
java.util.Timer
(todos los scheduleXXX()
métodos)java.util.concurrent.Executor#execute()
java.util.concurrent.ExecutorService
(los invokeXXX()
y submit()
métodos)java.util.concurrent.ScheduledExecutorService
(todos los scheduleXXX()
métodos)java.lang.reflect.Method#invoke()
java.util.Date
(los métodos de establecimiento hacen eso, Date
está representado internamente por un long
valor)java.io.Serializable
javax.faces.component.StateHolder
java.util.Observer
/ java.util.Observable
(aunque rara vez se usa en el mundo real)java.util.EventListener
(prácticamente en todo Swing)javax.servlet.http.HttpSessionBindingListener
javax.servlet.http.HttpSessionAttributeListener
javax.faces.event.PhaseListener
javax.faces.lifecycle.LifeCycle#execute()
(controlado por FacesServlet
, el comportamiento depende de la fase actual (estado) del ciclo de vida de JSF)java.util.Comparator#compare()
, ejecutado por entre otros Collections#sort()
.javax.servlet.http.HttpServlet
, los métodos service()
y todos doXXX()
toman HttpServletRequest
y HttpServletResponse
y el implementador tiene que procesarlos (¡y no obtenerlos como variables de instancia!).javax.servlet.Filter#doFilter()
java.io.InputStream
, java.io.OutputStream
, java.io.Reader
y java.io.Writer
.java.util.AbstractList
, java.util.AbstractSet
y java.util.AbstractMap
.javax.servlet.http.HttpServlet
, todos los doXXX()
métodos de forma predeterminada envían un error HTTP 405 "Método no permitido" a la respuesta. Eres libre de implementar ninguno o ninguno de ellos.Observable
, Observer
)ContainerAdapter
, ComponentAdapter
, FocusAdapter
, KeyAdapter
, MouseAdapter
son no adaptadores; en realidad son objetos nulos. Mala elección de nombres por parte de Sun.BufferedInputStream
puede decorar otras secuencias como FilterInputStream
)java.lang.Runtime#getRuntime()
es SingletonButtonGroup
para patrón de mediadorAction
, AbstractAction
se puede usar para diferentes representaciones visuales para ejecutar el mismo código -> Patrón de comandoy muchos más supongo
clone()
método g puede usarse para este propósitojava.awt
y java.swing
paquetes. De hecho, comparten atributos intrínsecos casi idénticos y los atributos extrínsecos son diferentes componentes de la interfaz de usuario que presentan en forma de interfaz de usuario.
RMI se basa en Proxy.
Debería ser posible citar uno para la mayoría de los 23 patrones en GoF:
No puedo pensar en ejemplos en Java para 10 de los 23, pero veré si puedo hacerlo mejor mañana. Para eso está la edición.
Aunque estoy un poco roto con este, la API XML de Java usa mucho Factory. Quiero decir solo mira esto:
Document doc = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(source);
String title = XPathFactory.newInstance().newXPath().evaluate("//title", doc);
...y así sucesivamente y así sucesivamente.
Además, varios Buffers (StringBuffer, ByteBuffer, StringBuilder) usan Builder.
java.util.Collection # Iterator es un buen ejemplo de un método de fábrica. Dependiendo de la subclase concreta de Colección que use, creará una implementación de Iterator. Debido a que tanto la superclase de Factory (Collection) como el Iterator creados son interfaces, a veces se confunde con AbstractFactory. La mayoría de los ejemplos de AbstractFactory en la respuesta aceptada (BalusC) son ejemplos de Factory , una versión simplificada de Factory Method, que no forma parte de los patrones originales de GoF. En Facory, la jerarquía de clases de Factory se contrae y la fábrica utiliza otros medios para elegir el producto que se devolverá.
Una fábrica abstracta tiene múltiples métodos de fábrica, cada uno creando un producto diferente. Los productos producidos por una fábrica están diseñados para usarse juntos (es mejor que su impresora y cartuchos sean de la misma fábrica (abstracta)). Como se menciona en las respuestas anteriores, las familias de componentes de AWT GUI, que difieren de una plataforma a otra, son un ejemplo de esto (aunque su implementación difiere de la estructura descrita en Gof).
javax.lang.model.element
define a los visitantes;) No estoy muy seguro de si sondoXXX
ydoFilter
son "estrategias".