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, FloatBuffere DoubleBuffer)javax.swing.GroupLayout.Group#addComponent()java.lang.Appendablejava.util.stream.Stream.Builderjava.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, Readere Writerhanno un costruttore prendendo un'istanza dello stesso tipo.java.util.Collections, I checkedXXX(), synchronizedXXX()e unmodifiableXXX()metodi.javax.servlet.http.HttpServletRequestWrapper e HttpServletResponseWrapperjavax.swing.JScrollPanejavax.faces.context.FacesContext, Si utilizza internamente tra gli altri tipi di interfaccia / astratti LifeCycle, ViewHandler, NavigationHandlere 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, Longe BigDecimal)java.lang.reflect.Proxyjava.rmi.*javax.ejb.EJB( spiegazione qui )javax.inject.Inject( spiegazione qui )javax.persistence.PersistenceContextjava.lang.Runnablejavax.swing.Actionjava.util.Patternjava.text.Normalizerjava.text.Formatjavax.el.ELResolverjava.util.Iterator(quindi anche tra le altre java.util.Scanner!).java.util.Enumerationjava.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 longvalore)java.io.Serializablejavax.faces.component.StateHolderjava.util.Observer/ java.util.Observable(usato raramente nel mondo reale)java.util.EventListener(praticamente in tutta Swing così)javax.servlet.http.HttpSessionBindingListenerjavax.servlet.http.HttpSessionAttributeListenerjavax.faces.event.PhaseListenerjavax.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 HttpServletRequeste HttpServletResponsee l'implementatore deve elaborarli (e non ottenerli come variabili di istanza!).javax.servlet.Filter#doFilter()java.io.InputStream, java.io.OutputStream, java.io.Readere java.io.Writer.java.util.AbstractList, java.util.AbstractSete 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, MouseAdaptersono senza adattatori; in realtà sono oggetti nulli. Scarsa scelta di denominazione da parte di Sun.BufferedInputStreamdecorativo ( può decorare altri flussi come FilterInputStream)java.lang.Runtime#getRuntime() è SingletonButtonGroup per modello mediatoreAction, AbstractActionpuò 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.awte java.swingpacchetti. 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.elementdefinisce i visitatori;) Non sono del tutto sicuro sedoXXXedoFiltersiano "strategie".