Satu,pola struktural
1,pola adaptor
digunakan untuk mengubah satu antarmuka menjadi antarmuka lain
java.util.Arrays#asList()
javax.swing.JTable(TableModel)
java.io.InputStreamReader(InputStream)
java.io.OutputStreamWriter(OutputStream)
javax.xml.bind.annotation.adapters.XmlAdapter#marshal()
javax.xml.bind.annotation.adapters.XmlAdapter#unmarshal()
2,pola jembatan
Pola ini memisahkan abstraksi dari implementasi operasi abstraknya, sehingga abstraksi dan implementasi dapat berubah secara independen
AWT (Menyediakan lapisan abstraksi yang memetakan dukungan sistem jendela ke sistem operasi asli.)
JDBC
3,pola komposit
Membuat klien memandang objek tunggal dan gabungan objek secara setara. Dengan kata lain, metode suatu tipe juga menerima tipe itu sendiri sebagai parameter
javax.swing.JComponent#add(Component)
java.awt.Container#add(Component)
java.util.Map#putAll(Map)
java.util.List#addAll(Collection)
java.util.Set#addAll(Collection)
4,pola Decorator
Menambahkan fungsi ekstra pada sebuah objek secara dinamis, yang juga merupakan alternatif untuk penggunaan subkelas. Dapat dilihat bahwa saat membuat suatu tipe, objek dengan tipe yang sama juga diteruskan. Ini dapat dijumpai di seluruh JDK, dan Anda akan mendapati bahwa pola ini ada di mana-mana, sehingga daftar berikut hanyalah sebagian kecil
java.io.BufferedInputStream(InputStream)
java.io.DataInputStream(InputStream)
java.io.BufferedOutputStream(OutputStream)
java.util.zip.ZipOutputStream(OutputStream)
java.util.Collections#checked<list |sortedmap |sortedset |set |map>
5,pola fasad
Menyediakan antarmuka sederhana untuk sekumpulan komponen, antarmuka, abstraksi, atau subsistem
java.lang.Class
javax.faces.webapp.FacesServlet
6,pola Flyweight
Menggunakan cache untuk mempercepat akses ke sejumlah besar objek kecil
java.lang.Integer#valueOf(int)
java.lang.Boolean#valueOf(boolean)
java.lang.Byte#valueOf(byte)
java.lang.Character#valueOf(char)
7,pola Proksi
Pola proksi menggunakan objek sederhana untuk menggantikan objek yang rumit atau membutuhkan waktu lama untuk dibuat.
java.lang.reflect.Proxy
RMI

Dua, pola kreasi
1,pola pabrik abstrak
Pola pabrik abstrak menyediakan sebuah protokol untuk menghasilkan serangkaian objek yang saling berkaitan atau berdiri sendiri, tanpa perlu menentukan tipe objek konkretnya. Pola ini memungkinkan aplikasi dipisahkan dari implementasi konkret kerangka kerja yang digunakan. Pola ini dapat ditemukan di mana-mana dalam JDK maupun banyak kerangka kerja seperti Spring. Pola ini juga mudah dikenali:metode yang membuat objek baru, tetapi mengembalikan antarmuka atau kelas abstrak, merupakan pola pabrik abstrak
java.util.Calendar#getInstance()
java.util.Arrays#asList()
java.util.ResourceBundle#getBundle()
java.sql.DriverManager#getConnection()
java.sql.Connection#createStatement()
java.sql.Statement#executeQuery()
java.text.NumberFormat#getInstance()
javax.xml.transform.TransformerFactory#newInstance()
2,pola Pembangun(Builder)
Mendefinisikan kelas baru untuk membangun instans kelas lain, guna menyederhanakan pembuatan objek yang rumit. Pola Builder biasanya juga menggunakan perangkaian metode untuk mewujudkan
java.lang.StringBuilder#append()
java.lang.StringBuffer#append()
java.sql.PreparedStatement
javax.swing.GroupLayout.Group#addComponent()
3,Metode pabrik
yaitu sebuah metode yang mengembalikan objek konkret
java.lang.Proxy#newProxyInstance()
java.lang.Object#toString()
java.lang.Class#newInstance()
java.lang.reflect.Array#newInstance()
java.lang.reflect.Constructor#newInstance()
java.lang.Boolean#valueOf(String)
java.lang.Class#forName()
4,pola Prototipe
Memungkinkan instans suatu kelas menghasilkan salinan dirinya sendiri。Jika pembuatan instans sebuah objek sangat rumit dan memakan waktu,pola ini dapat digunakan,sehingga alih-alih membuat instans baru,Anda dapat menyalin sebuah objek dan langsung memodifikasinya
java.lang.Object#clone()
java.lang.Cloneable
5,pola Singleton
digunakan untuk memastikan suatu kelas hanya memiliki satu instans. Joshua Bloch menyarankan dalam Effetive Java bahwa ada satu cara lain, yaitu menggunakan enum
java.lang.Runtime#getRuntime()
java.awt.Toolkit#getDefaultToolkit()
java.awt.GraphicsEnvironment#getLocalGraphicsEnvironment()
java.awt.Desktop#getDesktop()
Tiga,Pola perilaku
1,pola rantai tanggung jawab
Mewujudkan pemisahan ketergantungan antarobjek dengan meneruskan permintaan dari satu objek ke objek berikutnya dalam rantai hingga permintaan selesai ditangani
java.util.logging.Logger#log()
javax.servlet.Filter#doFilter()
2,pola Command
Mengenkapsulasi operasi di dalam objek agar dapat disimpan, diteruskan, dan dikembalikan
java.lang.Runnable
javax.swing.Action
3,pola Interpreter
Pola ini biasanya mendefinisikan tata bahasa suatu bahasa, lalu mengurai pernyataan yang sesuai dengan tata bahasa tersebut
java.util.Pattern
java.text.Normalizer
java.text.Format
4,Pola Iterator
Menyediakan cara yang konsisten untuk mengakses objek dalam koleksi secara berurutan, tanpa bergantung pada implementasi konkret koleksi yang mendasarinya
java.util.Iterator
java.util.Enumeration
5,pola Mediator
Menggunakan objek perantara untuk mendistribusikan pesan dan mengurangi ketergantungan langsung antarkelas
java.util.Timer
java.util.concurrent.Executor#execute()
java.util.concurrent.ExecutorService#submit()
java.lang.reflect.Method#invoke()
6,pola Memento
Membuat sebuah cuplikan keadaan objek agar objek dapat memulihkan keadaan aslinya tanpa mengekspos isinya sendiri. Objek Date menerapkan pola Memento melalui sebuah nilai long di dalamnya
java.util.Date
java.io.Serializable
7,Pola Objek Null
Pola ini menggunakan objek tanpa makna untuk menggantikan keadaan tanpa objek. Dengan demikian, Anda tidak perlu melakukan penanganan tambahan terhadap objek kosong
java.util.Collections#emptyList()
java.util.Collections#emptyMap()
java.util.Collections#emptySet()
8,pola pengamat
Pola ini memungkinkan sebuah objek mengirimkan pesan secara fleksibel kepada objek yang berminat
java.util.EventListener
javax.servlet.http.HttpSessionBindingListener
javax.servlet.http.HttpSessionAttributeListener
javax.faces.event.PhaseListener
9,pola status
Dengan mengubah keadaan internal objek, Anda dapat mengubah perilaku objek secara dinamis saat program berjalan
java.util.Iterator
javax.faces.lifecycle.LifeCycle#execute()
10,Pola strategi
Gunakan pola ini untuk membungkus sekumpulan algoritma menjadi serangkaian objek. Dengan meneruskan objek-objek tersebut, fungsi program dapat diubah secara fleksibel
java.util.Comparator#compare()
javax.servlet.http.HttpServlet
javax.servlet.Filter#doFilter()
11,Pola Metode Templat
Memungkinkan subkelas menimpa sebagian metode tanpa harus menimpa seluruhnya;Anda dapat mengendalikan operasi mana yang perlu ditimpa oleh subkelas
java.util.Collections#sort()
java.io.InputStream#skip()
java.io.InputStream#read()
java.util.AbstractList#indexOf()
12,Pola Visitor
Menyediakan cara yang praktis dan mudah dipelihara untuk mengoperasikan sekumpulan objek. Dengan cara ini, Anda dapat mengubah atau memperluas perilaku objek tanpa mengubah objek yang dioperasikan
javax.lang.model.element.Element dan javax.lang.model.element.ElementVisitor
javax.lang.model.type.TypeMirror dan javax.lang.model.type.TypeVisitor
Catatan penerjemah: Banyak bagian mungkin dapat diperdebatkan. Apakah sesuatu termasuk pola tertentu sebenarnya tidak terlalu penting; yang penting adalah desainnya dapat memberikan pelajaran untuk memperbaiki kode kita