Jawaban:
Anda dapat menemukan ikhtisar dari banyak pola desain di Wikipedia . Itu juga menyebutkan pola mana yang disebutkan oleh GoF. Saya akan meringkasnya di sini dan mencoba untuk menetapkan implementasi pola sebanyak mungkin, ditemukan di Java SE dan Java EE APIs.
javax.xml.parsers.DocumentBuilderFactory#newInstance()javax.xml.transform.TransformerFactory#newInstance()javax.xml.xpath.XPathFactory#newInstance()java.lang.StringBuilder#append() (tidak disinkronkan)java.lang.StringBuffer#append() (disinkronkan)java.nio.ByteBuffer#put()(juga pada CharBuffer, ShortBuffer, IntBuffer, LongBuffer, FloatBufferdan 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) (Mengembalikan objek singleton per protokol)java.util.EnumSet#of()javax.xml.bind.JAXBContext#createMarshaller() dan metode serupa lainnyajava.lang.Object#clone()(kelas harus diimplementasikan java.lang.Cloneable)java.util.Arrays#asList()java.util.Collections#list()java.util.Collections#enumeration()java.io.InputStreamReader(InputStream)(mengembalikan a Reader)java.io.OutputStreamWriter(OutputStream)(mengembalikan a Writer)javax.xml.bind.annotation.adapters.XmlAdapter#marshal() dan #unmarshal()new LinkedHashMap(LinkedHashSet<K>, List<V>)mengembalikan peta tertaut yang tidak dapat dimodifikasi yang tidak mengkloning item, tetapi menggunakannya . Namun java.util.Collections#newSetFromMap()dan singletonXXX()metode mendekati.java.awt.Container#add(Component) (Praktis seluruh Ayunan demikian)javax.faces.component.UIComponent#getChildren() (dengan demikian, seluruh JSF UI)java.io.InputStream, OutputStream, Readerdan Writermemiliki konstruktor mengambil sebuah contoh dari jenis yang sama.java.util.Collections, Yang checkedXXX(), synchronizedXXX()dan unmodifiableXXX()metode.javax.servlet.http.HttpServletRequestWrapper dan HttpServletResponseWrapperjavax.swing.JScrollPanejavax.faces.context.FacesContext, Secara internal menggunakan antara lain jenis / antarmuka abstrak LifeCycle, ViewHandler, NavigationHandlerdan masih banyak lagi tanpa yang pengguna akhir harus khawatir tentang hal itu (yang bagaimanapun overrideable dengan injeksi).javax.faces.context.ExternalContext, Yang secara internal menggunakan ServletContext, HttpSession, HttpServletRequest, HttpServletResponse, dlljava.lang.Integer#valueOf(int)(juga pada Boolean, Byte, Character, Short, Longdan BigDecimal)java.lang.reflect.Proxyjava.rmi.*javax.ejb.EJB( penjelasan di sini )javax.inject.Inject( penjelasan di sini )javax.persistence.PersistenceContextjava.lang.Runnablejavax.swing.Actionjava.util.Patternjava.text.Normalizerjava.text.Formatjavax.el.ELResolverjava.util.Iterator (dengan demikian antara lain juga java.util.Scanner!).java.util.Enumerationjava.util.Timer(semua scheduleXXX()metode)java.util.concurrent.Executor#execute()java.util.concurrent.ExecutorService( invokeXXX()dansubmit() metode)java.util.concurrent.ScheduledExecutorService(semua scheduleXXX()metode)java.lang.reflect.Method#invoke()java.util.Date (Metode setter melakukan itu, Date secara internal diwakili oleh longnilai)java.io.Serializablejavax.faces.component.StateHolderjava.util.Observer/java.util.Observable (jarang digunakan di dunia nyata)java.util.EventListener(praktis seluruh Ayunan demikian)javax.servlet.http.HttpSessionBindingListenerjavax.servlet.http.HttpSessionAttributeListenerjavax.faces.event.PhaseListenerjavax.faces.lifecycle.LifeCycle#execute()(dikontrol oleh FacesServlet, perilaku tergantung pada fase saat ini (keadaan) siklus hidup JSF)java.util.Comparator#compare(), dieksekusi antara lain Collections#sort().javax.servlet.http.HttpServlet, service()dan semua doXXX()metode mengambil HttpServletRequestdan HttpServletResponsedan implementor harus memprosesnya (dan tidak mendapatkannya sebagai variabel instan!).javax.servlet.Filter#doFilter()java.io.InputStream, java.io.OutputStream, java.io.Readerdanjava.io.Writer .java.util.AbstractList, java.util.AbstractSetdan java.util.AbstractMap.javax.servlet.http.HttpServlet, semua doXXX()metode secara default mengirimkan kesalahan HTTP 405 "Metode Tidak Diizinkan" ke respons. Anda bebas menerapkan tidak satupun dari mereka.Observable, Observer)ContainerAdapter, ComponentAdapter, FocusAdapter, KeyAdapter, MouseAdapteryang tidak adapter; mereka sebenarnya Null Objects. Pilihan penamaan yang buruk oleh Sun.BufferedInputStreamdapat menghias aliran lain seperti FilterInputStream)java.lang.Runtime#getRuntime() adalah SingletonButtonGroup untuk pola MediatorAction, AbstractAction dapat digunakan untuk representasi visual yang berbeda untuk mengeksekusi kode yang sama -> pola perintahdan masih banyak lagi kurasa
clone()metode ini dapat digunakan untuk tujuan ini.java.awtdan java.swingpaket. Memang, mereka berbagi atribut intrinsik yang hampir identik dan atribut ekstrinsik adalah komponen UI yang berbeda yang mereka tata dalam bentuk UI.
RMI didasarkan pada Proksi.
Seharusnya dimungkinkan untuk mengutip satu untuk sebagian besar dari 23 pola di GoF:
Saya tidak bisa memikirkan contoh di Jawa selama 10 dari 23, tetapi saya akan melihat apakah saya bisa melakukan yang lebih baik besok. Untuk itulah sunting.
Meskipun saya semacam jam yang rusak dengan ini, Java XML API banyak menggunakan Factory. Maksud saya lihat saja ini:
Document doc = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(source);
String title = XPathFactory.newInstance().newXPath().evaluate("//title", doc);
... dan seterusnya dan seterusnya.
Selain itu berbagai Buffer (StringBuffer, ByteBuffer, StringBuilder) menggunakan Builder.
java.util.Collection # Iterator adalah contoh yang baik dari Metode Pabrik. Bergantung pada subkelas beton Koleksi yang Anda gunakan, itu akan membuat implementasi Iterator. Karena baik superclass Pabrik (Koleksi) dan Iterator yang dibuat adalah antarmuka, kadang-kadang bingung dengan AbstractFactory. Sebagian besar contoh untuk AbstractFactory dalam jawaban yang diterima (BalusC) adalah contoh Factory , versi yang disederhanakan dari Metode Pabrik, yang bukan bagian dari pola GoF asli. Dalam Facory the hierarki kelas Pabrik runtuh dan pabrik menggunakan cara lain untuk memilih produk yang akan dikembalikan.
Pabrik abstrak memiliki banyak metode pabrik, masing-masing menciptakan produk yang berbeda. Produk yang dihasilkan oleh satu pabrik dimaksudkan untuk digunakan bersama (printer dan kartrid Anda sebaiknya dari pabrik yang sama (abstrak)). Seperti disebutkan dalam jawaban di atas keluarga komponen AWT GUI, berbeda dari platform ke platform, adalah contohnya (walaupun implementasinya berbeda dari struktur yang dijelaskan dalam Gof).
javax.lang.model.elementmendefinisikan pengunjung;) Saya tidak yakin apakahdoXXXdandoFilter"strategi".