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
, FloatBuffer
dan 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)
(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
, Reader
dan Writer
memiliki konstruktor mengambil sebuah contoh dari jenis yang sama.java.util.Collections
, Yang checkedXXX()
, synchronizedXXX()
dan unmodifiableXXX()
metode.javax.servlet.http.HttpServletRequestWrapper
dan HttpServletResponseWrapper
javax.swing.JScrollPane
javax.faces.context.FacesContext
, Secara internal menggunakan antara lain jenis / antarmuka abstrak LifeCycle
, ViewHandler
, NavigationHandler
dan 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
, Long
dan BigDecimal
)java.lang.reflect.Proxy
java.rmi.*
javax.ejb.EJB
( penjelasan di sini )javax.inject.Inject
( penjelasan di sini )javax.persistence.PersistenceContext
java.lang.Runnable
javax.swing.Action
java.util.Pattern
java.text.Normalizer
java.text.Format
javax.el.ELResolver
java.util.Iterator
(dengan demikian antara lain juga java.util.Scanner
!).java.util.Enumeration
java.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 long
nilai)java.io.Serializable
javax.faces.component.StateHolder
java.util.Observer
/java.util.Observable
(jarang digunakan di dunia nyata)java.util.EventListener
(praktis seluruh Ayunan demikian)javax.servlet.http.HttpSessionBindingListener
javax.servlet.http.HttpSessionAttributeListener
javax.faces.event.PhaseListener
javax.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 HttpServletRequest
dan HttpServletResponse
dan implementor harus memprosesnya (dan tidak mendapatkannya sebagai variabel instan!).javax.servlet.Filter#doFilter()
java.io.InputStream
, java.io.OutputStream
, java.io.Reader
danjava.io.Writer
.java.util.AbstractList
, java.util.AbstractSet
dan 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
, MouseAdapter
yang tidak adapter; mereka sebenarnya Null Objects. Pilihan penamaan yang buruk oleh Sun.BufferedInputStream
dapat 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.awt
dan java.swing
paket. 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.element
mendefinisikan pengunjung;) Saya tidak yakin apakahdoXXX
dandoFilter
"strategi".