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, FloatBufferi 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) (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, Readeri Writerma konstruktora biorąc instancji tego samego typu.java.util.Collections, Z checkedXXX(), synchronizedXXX()i unmodifiableXXX()metod.javax.servlet.http.HttpServletRequestWrapper i HttpServletResponseWrapperjavax.swing.JScrollPanejavax.faces.context.FacesContext, To wewnętrznie wykorzystuje m.in. abstrakcyjne typy interfejsów / LifeCycle, ViewHandler, NavigationHandleri 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, Longi BigDecimal)java.lang.reflect.Proxyjava.rmi.*javax.ejb.EJB( wyjaśnienie tutaj )javax.inject.Inject( wyjaśnienie tutaj )javax.persistence.PersistenceContextjava.lang.Runnablejavax.swing.Actionjava.util.Patternjava.text.Normalizerjava.text.Formatjavax.el.ELResolverjava.util.Iterator(a więc także także java.util.Scanner!).java.util.Enumerationjava.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, Datejest wewnętrznie reprezentowane przez longwartość)java.io.Serializablejavax.faces.component.StateHolderjava.util.Observer/ java.util.Observable(rzadko używany w prawdziwym świecie)java.util.EventListener(praktycznie całego Swinga)javax.servlet.http.HttpSessionBindingListenerjavax.servlet.http.HttpSessionAttributeListenerjavax.faces.event.PhaseListenerjavax.faces.lifecycle.LifeCycle#execute()(kontrolowane przez FacesServletzachowanie 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ą HttpServletRequesti HttpServletResponseimplementator musi je przetworzyć (i nie przyjmować ich jako zmiennych instancji!).javax.servlet.Filter#doFilter()java.io.InputStream, java.io.OutputStream, java.io.Readeri java.io.Writer.java.util.AbstractList, java.util.AbstractSeti 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, MouseAdapterto nie adaptery; w rzeczywistości są to obiekty zerowe. Zły wybór nazewnictwa przez Sun.BufferedInputStreammoże ozdobić inne strumienie, takie jak FilterInputStream)java.lang.Runtime#getRuntime() jest SingletonButtonGroup dla wzoru MediatorAction, AbstractActionmoż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.awti java.swingpakiety. 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.elementokreśla odwiedzających;) Nie jestem do końca pewien, czydoXXXidoFiltersą „strategiami”.