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
, FloatBuffer
und 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)
(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
, Reader
und Writer
haben einen Konstruktor eine Instanz gleichen Typs nehmen.java.util.Collections
, Die checkedXXX()
, synchronizedXXX()
und unmodifiableXXX()
Methoden.javax.servlet.http.HttpServletRequestWrapper
und HttpServletResponseWrapper
javax.swing.JScrollPane
javax.faces.context.FacesContext
, Verwendet es intern unter anderem die abstrakten / Interface - Typen LifeCycle
, ViewHandler
, NavigationHandler
und 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
, HttpServletResponse
etc.java.lang.Integer#valueOf(int)
(auch auf Boolean
, Byte
, Character
, Short
, Long
und BigDecimal
)java.lang.reflect.Proxy
java.rmi.*
javax.ejb.EJB
( Erklärung hier )javax.inject.Inject
( Erklärung hier )javax.persistence.PersistenceContext
java.lang.Runnable
javax.swing.Action
java.util.Pattern
java.text.Normalizer
java.text.Format
javax.el.ELResolver
java.util.Iterator
(also unter anderem auch java.util.Scanner
!).java.util.Enumeration
java.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 Date
werden intern durch einen long
Wert dargestellt.)java.io.Serializable
javax.faces.component.StateHolder
java.util.Observer
/ java.util.Observable
(wird in der realen Welt allerdings selten verwendet)java.util.EventListener
(praktisch überall auf Swing also)javax.servlet.http.HttpSessionBindingListener
javax.servlet.http.HttpSessionAttributeListener
javax.faces.event.PhaseListener
javax.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 HttpServletRequest
und HttpServletResponse
und der Implementierer muss sie verarbeiten (und sie nicht als Instanzvariablen erhalten!).javax.servlet.Filter#doFilter()
java.io.InputStream
, java.io.OutputStream
, java.io.Reader
und java.io.Writer
.java.util.AbstractList
, java.util.AbstractSet
und java.util.AbstractMap
.javax.servlet.http.HttpServlet
doXXX()
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
, MouseAdapter
ist nicht Adapter; Sie sind eigentlich Null-Objekte. Schlechte Namenswahl von Sun.BufferedInputStream
können andere Ströme dekorieren wie FilterInputStream
)java.lang.Runtime#getRuntime()
ist SingletonButtonGroup
für Mediator-MusterAction
, AbstractAction
kann 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.awt
als auch java.swing
Pakete 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.element
definiert Besucher;) Ich bin mir nicht ganz sicher, obdoXXX
unddoFilter
sind "Strategien".