Respostas:
Você pode encontrar uma visão geral de muitos padrões de design na Wikipedia . Também menciona quais padrões são mencionados pelo GoF. Vou resumir aqui e tentar atribuir o maior número possível de implementações de padrões, encontradas nas APIs Java SE e Java EE.
javax.xml.parsers.DocumentBuilderFactory#newInstance()
javax.xml.transform.TransformerFactory#newInstance()
javax.xml.xpath.XPathFactory#newInstance()
java.lang.StringBuilder#append()
(não sincronizado)java.lang.StringBuffer#append()
(sincronizado)java.nio.ByteBuffer#put()
(também em CharBuffer
, ShortBuffer
, IntBuffer
, LongBuffer
, FloatBuffer
e 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)
(Retorna objeto singleton por protocolo)java.util.EnumSet#of()
javax.xml.bind.JAXBContext#createMarshaller()
e outros métodos similaresjava.lang.Object#clone()
(a classe precisa implementar java.lang.Cloneable
)java.util.Arrays#asList()
java.util.Collections#list()
java.util.Collections#enumeration()
java.io.InputStreamReader(InputStream)
(retorna a Reader
)java.io.OutputStreamWriter(OutputStream)
(retorna a Writer
)javax.xml.bind.annotation.adapters.XmlAdapter#marshal()
e #unmarshal()
new LinkedHashMap(LinkedHashSet<K>, List<V>)
que retorna um mapa vinculado não modificável que não clona os itens, mas os utiliza . Os métodos java.util.Collections#newSetFromMap()
e singletonXXX()
no entanto se aproximam.java.awt.Container#add(Component)
(praticamente em todo o balanço assim)javax.faces.component.UIComponent#getChildren()
(praticamente em toda a interface do usuário JSF, portanto)java.io.InputStream
, OutputStream
, Reader
e Writer
ter um construtor de tomar uma instância do mesmo tipo.java.util.Collections
, the checkedXXX()
, synchronizedXXX()
e unmodifiableXXX()
métodos.javax.servlet.http.HttpServletRequestWrapper
e HttpServletResponseWrapper
javax.swing.JScrollPane
javax.faces.context.FacesContext
, Ele usa internamente entre outros, os tipos de interface / resumo LifeCycle
, ViewHandler
, NavigationHandler
e muitos mais, sem que o usuário final tem que se preocupar com ele (que são, no entanto overrideable por injeção).javax.faces.context.ExternalContext
, Que usa internamente ServletContext
, HttpSession
, HttpServletRequest
, HttpServletResponse
, etc.java.lang.Integer#valueOf(int)
(também em Boolean
, Byte
, Character
, Short
, Long
e BigDecimal
)java.lang.reflect.Proxy
java.rmi.*
javax.ejb.EJB
( explicação aqui )javax.inject.Inject
( explicação aqui )javax.persistence.PersistenceContext
java.lang.Runnable
javax.swing.Action
java.util.Pattern
java.text.Normalizer
java.text.Format
javax.el.ELResolver
java.util.Iterator
(assim, entre outros também java.util.Scanner
!).java.util.Enumeration
java.util.Timer
(todos os scheduleXXX()
métodos)java.util.concurrent.Executor#execute()
java.util.concurrent.ExecutorService
(a invokeXXX()
e submit()
métodos)java.util.concurrent.ScheduledExecutorService
(todos os scheduleXXX()
métodos)java.lang.reflect.Method#invoke()
java.util.Date
(os métodos setter fazem isso, Date
são representados internamente por um long
valor)java.io.Serializable
javax.faces.component.StateHolder
java.util.Observer
/ java.util.Observable
(raramente usado no mundo real)java.util.EventListener
(praticamente em todo Swing, portanto)javax.servlet.http.HttpSessionBindingListener
javax.servlet.http.HttpSessionAttributeListener
javax.faces.event.PhaseListener
javax.faces.lifecycle.LifeCycle#execute()
(controlado por FacesServlet
, o comportamento depende da fase atual (estado) do ciclo de vida do JSF)java.util.Comparator#compare()
, executado por entre outros Collections#sort()
.javax.servlet.http.HttpServlet
, o service()
e todos os doXXX()
métodos tomam HttpServletRequest
e HttpServletResponse
o implementador precisa processá-los (e não se apossar deles como variáveis de instância!).javax.servlet.Filter#doFilter()
java.io.InputStream
, java.io.OutputStream
, java.io.Reader
e java.io.Writer
.java.util.AbstractList
, java.util.AbstractSet
e java.util.AbstractMap
.javax.servlet.http.HttpServlet
, todos os doXXX()
métodos, por padrão, enviam um erro HTTP 405 "Método não permitido" para a resposta. Você é livre para implementar nenhum ou nenhum deles.Observable
, Observer
)ContainerAdapter
, ComponentAdapter
, FocusAdapter
, KeyAdapter
, MouseAdapter
são não adaptadores; eles são na verdade objetos nulos. Má escolha de nomes pelo sol.BufferedInputStream
pode decorar outros fluxos, como FilterInputStream
)java.lang.Runtime#getRuntime()
é SingletonButtonGroup
para padrão MediadorAction
, AbstractAction
pode ser usado para diferentes representações visuais para executar o mesmo código -> Padrão de comandoe muito mais eu acho
clone()
método pode ser usado para esse fim.java.awt
e java.swing
pacotes. Na verdade, eles compartilham atributos intrínsecos quase idênticos e atributos extrínsecos são componentes diferentes da interface do usuário que eles apresentam no formato da interface do usuário.
O RMI é baseado em Proxy.
Deve ser possível citar um para a maioria dos 23 padrões no GoF:
Não consigo pensar em exemplos em Java para 10 dos 23, mas vou ver se posso fazer melhor amanhã. É para isso que serve a edição.
Embora eu esteja meio que com um relógio quebrado, a API Java XML usa muito o Factory. Quero dizer, basta olhar para isso:
Document doc = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(source);
String title = XPathFactory.newInstance().newXPath().evaluate("//title", doc);
...e assim por diante.
Além disso, vários buffers (StringBuffer, ByteBuffer, StringBuilder) usam o Builder.
java.util.Collection # Iterator é um bom exemplo de um método de fábrica. Dependendo da subclasse concreta de Collection usada, ele criará uma implementação de Iterator. Como a superclasse Factory (Collection) e o Iterator criados são interfaces, às vezes é confundido com AbstractFactory. A maioria dos exemplos de AbstractFactory na resposta aceita (BalusC) são exemplos de Factory , uma versão simplificada do Factory Method, que não faz parte dos padrões GoF originais. No Facory, a hierarquia da classe Factory é reduzida e a fábrica usa outros meios para escolher o produto a ser devolvido.
Uma fábrica abstrata possui vários métodos de fábrica, cada um criando um produto diferente. Os produtos produzidos por uma fábrica devem ser usados juntos (é melhor que a impressora e os cartuchos sejam da mesma fábrica (abstrata)). Como mencionado nas respostas acima, as famílias de componentes da GUI do AWT, que diferem de plataforma para plataforma, são um exemplo disso (embora sua implementação seja diferente da estrutura descrita em Gof).
javax.lang.model.element
define visitantes;) Não tenho certeza se sãodoXXX
oudoFilter
não "estratégias".