Odpowiedzi:
Przegląd wielu wzorców projektowych można znaleźć w Wikipedii . Wspomina również, które wzory są wymienione przez GoF. Podsumuję je tutaj i spróbuję przypisać jak najwięcej implementacji wzorców, które można znaleźć zarówno w interfejsach API Java SE, jak i Java EE.
javax.xml.parsers.DocumentBuilderFactory#newInstance()
javax.xml.transform.TransformerFactory#newInstance()
javax.xml.xpath.XPathFactory#newInstance()
java.lang.StringBuilder#append()
(niezsynchronizowany)java.lang.StringBuffer#append()
(zsynchronizowany)java.nio.ByteBuffer#put()
(także w CharBuffer
, ShortBuffer
, IntBuffer
, LongBuffer
, FloatBuffer
i 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)
(Zwraca obiekt singletonu według protokołu)java.util.EnumSet#of()
javax.xml.bind.JAXBContext#createMarshaller()
i inne podobne metodyjava.lang.Object#clone()
(klasa musi zaimplementować java.lang.Cloneable
)java.util.Arrays#asList()
java.util.Collections#list()
java.util.Collections#enumeration()
java.io.InputStreamReader(InputStream)
(zwraca a Reader
)java.io.OutputStreamWriter(OutputStream)
(zwraca a Writer
)javax.xml.bind.annotation.adapters.XmlAdapter#marshal()
i #unmarshal()
new LinkedHashMap(LinkedHashSet<K>, List<V>)
niemodyfikowana połączona mapa, która nie klonuje przedmiotów, ale używa ich. java.util.Collections#newSetFromMap()
I singletonXXX()
metody jednak zbliża.java.awt.Container#add(Component)
(praktycznie cały Swing w ten sposób)javax.faces.component.UIComponent#getChildren()
(praktycznie w całym interfejsie JSF)java.io.InputStream
, OutputStream
, Reader
i Writer
ma konstruktora biorąc instancji tego samego typu.java.util.Collections
, Z checkedXXX()
, synchronizedXXX()
i unmodifiableXXX()
metod.javax.servlet.http.HttpServletRequestWrapper
i HttpServletResponseWrapper
javax.swing.JScrollPane
javax.faces.context.FacesContext
, To wewnętrznie wykorzystuje m.in. abstrakcyjne typy interfejsów / LifeCycle
, ViewHandler
, NavigationHandler
i wiele innych bez że Użytkownik końcowy musi martwić się o to (które są jednak na sterowanie ręczne przez wstrzyknięcie).javax.faces.context.ExternalContext
, Wykorzystująca wewnętrzne ServletContext
, HttpSession
, HttpServletRequest
, HttpServletResponse
, etc.java.lang.Integer#valueOf(int)
(także w Boolean
, Byte
, Character
, Short
, Long
i BigDecimal
)java.lang.reflect.Proxy
java.rmi.*
javax.ejb.EJB
( wyjaśnienie tutaj )javax.inject.Inject
( wyjaśnienie tutaj )javax.persistence.PersistenceContext
java.lang.Runnable
javax.swing.Action
java.util.Pattern
java.text.Normalizer
java.text.Format
javax.el.ELResolver
java.util.Iterator
(a więc także także java.util.Scanner
!).java.util.Enumeration
java.util.Timer
(wszystkie scheduleXXX()
metody)java.util.concurrent.Executor#execute()
java.util.concurrent.ExecutorService
( invokeXXX()
i submit()
metody)java.util.concurrent.ScheduledExecutorService
(wszystkie scheduleXXX()
metody)java.lang.reflect.Method#invoke()
java.util.Date
(robią to metody ustawiające, Date
jest wewnętrznie reprezentowane przez long
wartość)java.io.Serializable
javax.faces.component.StateHolder
java.util.Observer
/ java.util.Observable
(rzadko używany w prawdziwym świecie)java.util.EventListener
(praktycznie całego Swinga)javax.servlet.http.HttpSessionBindingListener
javax.servlet.http.HttpSessionAttributeListener
javax.faces.event.PhaseListener
javax.faces.lifecycle.LifeCycle#execute()
(kontrolowane przez FacesServlet
zachowanie jest zależne od bieżącej fazy (stanu) cyklu życia JSF)java.util.Comparator#compare()
, wykonane między innymi Collections#sort()
.javax.servlet.http.HttpServlet
, service()
wszystkie i wszystkie doXXX()
metody przyjmują HttpServletRequest
i HttpServletResponse
implementator musi je przetworzyć (i nie przyjmować ich jako zmiennych instancji!).javax.servlet.Filter#doFilter()
java.io.InputStream
, java.io.OutputStream
, java.io.Reader
i java.io.Writer
.java.util.AbstractList
, java.util.AbstractSet
i java.util.AbstractMap
.javax.servlet.http.HttpServlet
, wszystkie doXXX()
metody domyślnie wysyłają do odpowiedzi błąd 405 „Metoda niedozwolona” HTTP 405. Możesz dowolnie je wdrożyć.Observable
, Observer
)ContainerAdapter
, ComponentAdapter
, FocusAdapter
, KeyAdapter
, MouseAdapter
to nie adaptery; w rzeczywistości są to obiekty zerowe. Zły wybór nazewnictwa przez Sun.BufferedInputStream
może ozdobić inne strumienie, takie jak FilterInputStream
)java.lang.Runtime#getRuntime()
jest SingletonButtonGroup
dla wzoru MediatorAction
, AbstractAction
może być używany do różnych prezentacji wizualnych w celu wykonania tego samego kodu -> Wzorzec poleceńi wiele innych
clone()
że w tym celu można zastosować metodę.java.awt
i java.swing
pakiety. Rzeczywiście, mają one prawie identyczne wewnętrzne atrybuty, a zewnętrzne atrybuty są różnymi składnikami interfejsu użytkownika, które układają w formie interfejsu użytkownika.
RMI opiera się na Proxy.
Powinno być możliwe zacytowanie jednego z większości 23 wzorów w GoF:
Nie mogę wymyślić przykładów w Javie dla 10 z 23, ale jutro zobaczę, czy dam radę. Po to jest edycja.
Mimo tego, że jestem zepsuty, ten interfejs API Java XML bardzo często korzysta z Factory. Popatrz na to:
Document doc = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(source);
String title = XPathFactory.newInstance().newXPath().evaluate("//title", doc);
...i tak dalej i tak dalej.
Dodatkowo różne bufory (StringBuffer, ByteBuffer, StringBuilder) korzystają z Buildera.
java.util.Collection # Iterator jest dobrym przykładem metody fabrycznej. W zależności od konkretnej podklasy Collection, której używasz, utworzy ona implementację Iterator. Ponieważ zarówno superklasa Factory (kolekcja), jak i utworzony Iterator są interfejsami, czasami jest mylona z AbstractFactory. Większość przykładów AbstractFactory w przyjętej odpowiedzi (BalusC) to przykłady Factory , uproszczonej wersji Factory Method, która nie jest częścią oryginalnych wzorców GoF. W Facory hierarchia klas fabryki jest zwinięta, a fabryka używa innych środków, aby wybrać produkt do zwrotu.
Fabryka abstrakcyjna ma wiele metod fabrycznych, z których każda tworzy inny produkt. Produkty wytwarzane przez jedną fabrykę są przeznaczone do wspólnego użytku (drukarka i wkłady powinny być z tej samej (abstrakcyjnej) fabryki). Jak wspomniano w odpowiedziach powyżej, rodziny komponentów AWT GUI, różniących się między platformami, są tego przykładem (chociaż jego implementacja różni się od struktury opisanej w Gof).
javax.lang.model.element
określa odwiedzających;) Nie jestem do końca pewien, czydoXXX
idoFilter
są „strategiami”.