Antworten:
Eine Übersicht über viele Designmuster finden Sie in Wikipedia . Es wird auch erwähnt, welche Muster von GoF erwähnt werden. Ich werde sie hier zusammenfassen und versuchen, so viele Musterimplementierungen wie möglich zuzuweisen, die sowohl in der Java SE- als auch in der Java EE-API enthalten sind.
javax.xml.parsers.DocumentBuilderFactory#newInstance()javax.xml.transform.TransformerFactory#newInstance()javax.xml.xpath.XPathFactory#newInstance()java.lang.StringBuilder#append() (nicht synchronisiert)java.lang.StringBuffer#append() (synchronisiert)java.nio.ByteBuffer#put()(auch auf CharBuffer, ShortBuffer, IntBuffer, LongBuffer, FloatBufferund 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) (Gibt ein Singleton-Objekt pro Protokoll zurück.)java.util.EnumSet#of()javax.xml.bind.JAXBContext#createMarshaller() und andere ähnliche Methodenjava.lang.Object#clone()(Die Klasse muss implementieren java.lang.Cloneable)java.util.Arrays#asList()java.util.Collections#list()java.util.Collections#enumeration()java.io.InputStreamReader(InputStream)(gibt a zurück Reader)java.io.OutputStreamWriter(OutputStream)(gibt a zurück Writer)javax.xml.bind.annotation.adapters.XmlAdapter#marshal() und #unmarshal()new LinkedHashMap(LinkedHashSet<K>, List<V>)das eine nicht modifizierbare verknüpfte Karte zurückgibt, die die Elemente nicht klont, sondern verwendet . Die java.util.Collections#newSetFromMap()und singletonXXX()Methoden kommen jedoch nahe.java.awt.Container#add(Component) (praktisch überall auf Swing also)javax.faces.component.UIComponent#getChildren() (praktisch überall auf der JSF-Benutzeroberfläche)java.io.InputStream, OutputStream, Readerund Writerhaben einen Konstruktor eine Instanz gleichen Typs nehmen.java.util.Collections, Die checkedXXX(), synchronizedXXX()und unmodifiableXXX()Methoden.javax.servlet.http.HttpServletRequestWrapper und HttpServletResponseWrapperjavax.swing.JScrollPanejavax.faces.context.FacesContext, Verwendet es intern unter anderem die abstrakten / Interface - Typen LifeCycle, ViewHandler, NavigationHandlerund vieles mehr , ohne dass der Enduser darüber Sorgen hat (die durch Injektion jedoch überschreibbar sind).javax.faces.context.ExternalContext, Die intern verwendet ServletContext, HttpSession, HttpServletRequest, HttpServletResponseetc.java.lang.Integer#valueOf(int)(auch auf Boolean, Byte, Character, Short, Longund BigDecimal)java.lang.reflect.Proxyjava.rmi.*javax.ejb.EJB( Erklärung hier )javax.inject.Inject( Erklärung hier )javax.persistence.PersistenceContextjava.lang.Runnablejavax.swing.Actionjava.util.Patternjava.text.Normalizerjava.text.Formatjavax.el.ELResolverjava.util.Iterator(also unter anderem auch java.util.Scanner!).java.util.Enumerationjava.util.Timer(alle scheduleXXX()Methoden)java.util.concurrent.Executor#execute()java.util.concurrent.ExecutorService(die invokeXXX()und submit()Methoden)java.util.concurrent.ScheduledExecutorService(alle scheduleXXX()Methoden)java.lang.reflect.Method#invoke()java.util.Date(Die Setter-Methoden tun dies und Datewerden intern durch einen longWert dargestellt.)java.io.Serializablejavax.faces.component.StateHolderjava.util.Observer/ java.util.Observable(wird in der realen Welt allerdings selten verwendet)java.util.EventListener(praktisch überall auf Swing also)javax.servlet.http.HttpSessionBindingListenerjavax.servlet.http.HttpSessionAttributeListenerjavax.faces.event.PhaseListenerjavax.faces.lifecycle.LifeCycle#execute()(gesteuert durch FacesServlet, das Verhalten ist abhängig von der aktuellen Phase (Zustand) des JSF-Lebenszyklus)java.util.Comparator#compare(), unter anderem von ausgeführt Collections#sort().javax.servlet.http.HttpServlet, die service()und alle doXXX()Methoden nehmen HttpServletRequestund HttpServletResponseund der Implementierer muss sie verarbeiten (und sie nicht als Instanzvariablen erhalten!).javax.servlet.Filter#doFilter()java.io.InputStream, java.io.OutputStream, java.io.Readerund java.io.Writer.java.util.AbstractList, java.util.AbstractSetund java.util.AbstractMap.javax.servlet.http.HttpServletdoXXX()Standardmäßig senden alle Methoden einen HTTP 405-Fehler "Methode nicht zulässig" an die Antwort. Es steht Ihnen frei, keine oder eine davon zu implementieren.Observable, Observer)ContainerAdapter, ComponentAdapter, FocusAdapter, KeyAdapter, MouseAdapterist nicht Adapter; Sie sind eigentlich Null-Objekte. Schlechte Namenswahl von Sun.BufferedInputStreamkönnen andere Ströme dekorieren wie FilterInputStream)java.lang.Runtime#getRuntime() ist SingletonButtonGroup für Mediator-MusterAction, AbstractActionkann für verschiedene visuelle Darstellungen verwendet werden, um denselben Code auszuführen -> Befehlsmusterund viele mehr, denke ich
clone()Methode für diesen Zweck verwendet werden kann.java.awtals auch java.swingPakete befinden. In der Tat haben sie fast identische intrinsische Attribute und extrinsische Attribute sind verschiedene UI-Komponenten, die sie in UI-Form anordnen.
RMI basiert auf Proxy.
Sollte möglich sein, eines für die meisten der 23 Muster in GoF zu zitieren:
Ich kann mir keine Beispiele in Java für 10 von 23 vorstellen, aber ich werde sehen, ob ich es morgen besser machen kann. Dafür ist Bearbeiten da.
Das Abstract Factory-Muster wird an verschiedenen Stellen verwendet. Zum Beispiel DatagramSocketImplFactory, PreferencesFactory. Es gibt noch viele weitere --- Durchsuchen Sie das Javadoc nach Schnittstellen, deren Name das Wort "Factory" enthält.
Es gibt auch einige Beispiele für das Factory-Muster.
Obwohl ich mit dieser Uhr eine Art kaputte Uhr bin, verwendet die Java XML-API häufig Factory. Ich meine, schau dir das an:
Document doc = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(source);
String title = XPathFactory.newInstance().newXPath().evaluate("//title", doc);
...und so weiter und so fort.
Zusätzlich verwenden verschiedene Puffer (StringBuffer, ByteBuffer, StringBuilder) Builder.
java.util.Collection # Iterator ist ein gutes Beispiel für eine Factory-Methode. Abhängig von der konkreten Unterklasse der Sammlung, die Sie verwenden, wird eine Iterator-Implementierung erstellt. Da sowohl die Factory-Superklasse (Sammlung) als auch der erstellte Iterator Schnittstellen sind, wird sie manchmal mit AbstractFactory verwechselt. Die meisten Beispiele für AbstractFactory in der akzeptierten Antwort (BalusC) sind Beispiele für Factory , eine vereinfachte Version der Factory-Methode, die nicht Teil der ursprünglichen GoF-Muster ist. In Facory wird die Factory-Klassenhierarchie reduziert und die Factory verwendet andere Mittel, um das zurückzugebende Produkt auszuwählen.
Eine abstrakte Fabrik verfügt über mehrere Fabrikmethoden, die jeweils ein anderes Produkt erstellen. Die von einer Fabrik hergestellten Produkte sollen zusammen verwendet werden (Ihr Drucker und Ihre Patronen stammen besser aus derselben (abstrakten) Fabrik). Wie in den obigen Antworten erwähnt, sind die von Plattform zu Plattform unterschiedlichen Familien von AWT-GUI-Komponenten ein Beispiel dafür (obwohl sich ihre Implementierung von der in Gof beschriebenen Struktur unterscheidet).
javax.lang.model.elementdefiniert Besucher;) Ich bin mir nicht ganz sicher, obdoXXXunddoFiltersind "Strategien".