Lewati ke konten utama

Cari di CooLWJ

选择搜索范围,输入关键词后按回车。

Bahasa

Pola desain apa saja yang digunakan dalam JDK?

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


Ilustrasi yang menggambarkan desain perangkat lunak melalui cangkir kopi Java dan adegan perakitan

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


Komentar

Mengirim

Pilih tema favorit

Tema pilihan berlaku di seluruh situs.