Risposte:
Puoi trovare una panoramica di molti modelli di design in Wikipedia . Indica anche quali schemi sono citati da GoF. Li riassumo qui e cercherò di assegnare il maggior numero possibile di implementazioni di pattern, presenti nelle API Java SE e Java EE.
javax.xml.parsers.DocumentBuilderFactory#newInstance()
javax.xml.transform.TransformerFactory#newInstance()
javax.xml.xpath.XPathFactory#newInstance()
java.lang.StringBuilder#append()
(Non sincronizzato)java.lang.StringBuffer#append()
(Sincronizzato)java.nio.ByteBuffer#put()
(anche su 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)
(Restituisce l'oggetto singleton per protocollo)java.util.EnumSet#of()
javax.xml.bind.JAXBContext#createMarshaller()
e altri metodi similijava.lang.Object#clone()
(la classe deve implementare java.lang.Cloneable
)java.util.Arrays#asList()
java.util.Collections#list()
java.util.Collections#enumeration()
java.io.InputStreamReader(InputStream)
(restituisce a Reader
)java.io.OutputStreamWriter(OutputStream)
(restituisce a Writer
)javax.xml.bind.annotation.adapters.XmlAdapter#marshal()
e #unmarshal()
new LinkedHashMap(LinkedHashSet<K>, List<V>)
che restituisce una mappa collegata non modificabile che non clona gli elementi, ma li utilizza . I metodi java.util.Collections#newSetFromMap()
e singletonXXX()
tuttavia si avvicinano.java.awt.Container#add(Component)
(praticamente in tutta Swing così)javax.faces.component.UIComponent#getChildren()
(praticamente in tutta l'interfaccia utente JSF quindi)java.io.InputStream
, OutputStream
, Reader
e Writer
hanno un costruttore prendendo un'istanza dello stesso tipo.java.util.Collections
, I checkedXXX()
, synchronizedXXX()
e unmodifiableXXX()
metodi.javax.servlet.http.HttpServletRequestWrapper
e HttpServletResponseWrapper
javax.swing.JScrollPane
javax.faces.context.FacesContext
, Si utilizza internamente tra gli altri tipi di interfaccia / astratti LifeCycle
, ViewHandler
, NavigationHandler
e molti altri, senza che l'utente finale deve preoccupare (che sono comunque ignorabile per iniezione).javax.faces.context.ExternalContext
, Che utilizza internamente ServletContext
, HttpSession
, HttpServletRequest
, HttpServletResponse
, etc.java.lang.Integer#valueOf(int)
(anche su Boolean
, Byte
, Character
, Short
, Long
e BigDecimal
)java.lang.reflect.Proxy
java.rmi.*
javax.ejb.EJB
( spiegazione qui )javax.inject.Inject
( spiegazione qui )javax.persistence.PersistenceContext
java.lang.Runnable
javax.swing.Action
java.util.Pattern
java.text.Normalizer
java.text.Format
javax.el.ELResolver
java.util.Iterator
(quindi anche tra le altre java.util.Scanner
!).java.util.Enumeration
java.util.Timer
(tutti i scheduleXXX()
metodi)java.util.concurrent.Executor#execute()
java.util.concurrent.ExecutorService
(i metodi invokeXXX()
e submit()
)java.util.concurrent.ScheduledExecutorService
(tutti i scheduleXXX()
metodi)java.lang.reflect.Method#invoke()
java.util.Date
(i metodi setter lo fanno, Date
è internamente rappresentato da un long
valore)java.io.Serializable
javax.faces.component.StateHolder
java.util.Observer
/ java.util.Observable
(usato raramente nel mondo reale)java.util.EventListener
(praticamente in tutta Swing così)javax.servlet.http.HttpSessionBindingListener
javax.servlet.http.HttpSessionAttributeListener
javax.faces.event.PhaseListener
javax.faces.lifecycle.LifeCycle#execute()
(controllato da FacesServlet
, il comportamento dipende dalla fase (stato) corrente del ciclo di vita di JSF)java.util.Comparator#compare()
, eseguito tra gli altri Collections#sort()
.javax.servlet.http.HttpServlet
, i metodi service()
e all doXXX()
prendono HttpServletRequest
e HttpServletResponse
e l'implementatore deve elaborarli (e non ottenerli come variabili di istanza!).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
, tutti i doXXX()
metodi per impostazione predefinita inviano un errore HTTP 405 "Metodo non consentito" alla risposta. Sei libero di implementare nessuno o nessuno di essi.Observable
, Observer
)ContainerAdapter
, ComponentAdapter
, FocusAdapter
, KeyAdapter
, MouseAdapter
sono senza adattatori; in realtà sono oggetti nulli. Scarsa scelta di denominazione da parte di Sun.BufferedInputStream
decorativo ( può decorare altri flussi come FilterInputStream
)java.lang.Runtime#getRuntime()
è SingletonButtonGroup
per modello mediatoreAction
, AbstractAction
può essere utilizzato per diverse rappresentazioni visive per eseguire lo stesso codice -> Pattern di comandoe molti altri immagino
clone()
metodo possa essere usato per questo scopo.java.awt
e java.swing
pacchetti. In effetti, condividono attributi intrinseci quasi identici e gli attributi estrinseci sono diversi componenti dell'interfaccia utente che presentano in forma di interfaccia utente.
RMI si basa sul proxy.
Dovrebbe essere possibile citarne uno per la maggior parte dei 23 modelli in GoF:
Non riesco a pensare ad esempi in Java per 10 su 23, ma vedrò se domani posso fare di meglio. Ecco a cosa serve la modifica.
Anche se sono una specie di orologio rotto con questo, l'API XML Java usa molto Factory. Voglio dire, guarda questo:
Document doc = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(source);
String title = XPathFactory.newInstance().newXPath().evaluate("//title", doc);
...E così via e così via.
Inoltre, vari buffer (StringBuffer, ByteBuffer, StringBuilder) utilizzano Builder.
java.util.Collection # Iterator è un buon esempio di un metodo Factory. A seconda della sottoclasse concreta di Collection utilizzata, verrà creata un'implementazione Iterator. Poiché sia la superclasse Factory (Collection) che l'Iterator creati sono interfacce, a volte viene confuso con AbstractFactory. La maggior parte degli esempi di AbstractFactory nella risposta accettata (BalusC) sono esempi di Factory , una versione semplificata del metodo Factory, che non fa parte dei modelli GoF originali. In Facory la gerarchia di classe Factory è crollata e la factory utilizza altri mezzi per scegliere il prodotto da restituire.
Una fabbrica astratta ha più metodi di fabbrica, ognuno dei quali crea un prodotto diverso. I prodotti fabbricati da una fabbrica devono essere usati insieme (la stampante e le cartucce devono essere della stessa fabbrica (astratta)). Come menzionato nelle risposte sopra, le famiglie di componenti della GUI di AWT, che differiscono da piattaforma a piattaforma, ne sono un esempio (sebbene la sua implementazione differisca dalla struttura descritta in Gof).
javax.lang.model.element
definisce i visitatori;) Non sono del tutto sicuro sedoXXX
edoFilter
siano "strategie".