I,Yapısal desenler
1,Adapter deseni
Bir arayüzü başka bir arayüze dönüştürmek için kullanılır
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,Köprü tasarım deseni
Bu desen, soyutlamayı ve soyut işlemlerin uygulamasını birbirinden ayırır; böylece soyutlama ve uygulama birbirinden bağımsız değişebilir
AWT (Yerel işletim sisteminin pencereleme desteğine eşlenen bir soyutlama katmanı sağlar.)
JDBC
3,Bileşik tasarım deseni
Böylece istemci açısından tek bir nesne ile nesnelerden oluşan bir bileşim eşdeğer olur. Başka bir deyişle, bir türün yöntemi, kendi türünü de parametre olarak kabul eder
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,Dekoratör tasarım deseni
Bir nesneye dinamik olarak ek işlevler kazandırmak, alt sınıf oluşturmanın da bir alternatifidir. Bir türden nesne oluşturulurken aynı türden başka bir nesnenin de aktarıldığı görülebilir. JDK'de buna her yerde rastlanır; bunun ne kadar yaygın olduğunu göreceksiniz, dolayısıyla aşağıdaki liste yalnızca küçük bir bölümünü içeriyor
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,Facade deseni
Bir bileşen、arayüz、soyutlama veya alt sistem grubuna basit bir arayüz sağlamak
java.lang.Class
javax.faces.webapp.FacesServlet
6,Flyweight deseni
Çok sayıda küçük nesneye erişimi hızlandırmak için önbellek kullanma
java.lang.Integer#valueOf(int)
java.lang.Boolean#valueOf(boolean)
java.lang.Byte#valueOf(byte)
java.lang.Character#valueOf(char)
7,Vekil deseni
Vekil deseni, karmaşık veya oluşturulması zaman alan bir nesnenin yerine basit bir nesne kullanmaktır.
java.lang.reflect.Proxy
RMI

II,Yaratımsal tasarım desenleri
1,Soyut Fabrika tasarım deseni
Soyut fabrika deseni, somut nesne türlerini belirtmeye gerek kalmadan, birbiriyle ilişkili veya bağımsız bir dizi nesne üretmek için bir protokol sağlar。Uygulamanın, kullandığı çerçevenin somut uygulamasına olan bağımlılığını ortadan kaldırır。JDK'de veya Spring gibi birçok çerçevede buna her yerde rastlanabilir。Bunları tanımak da kolaydır; yeni bir nesne oluşturan bir metot, arayüz veya soyut sınıf döndürüyorsa bu, soyut fabrika desenidir
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,İnşacı tasarım deseni(Builder)
Karmaşık nesnelerin oluşturulmasını kolaylaştırmak için başka bir sınıfın örneklerini oluşturan yeni bir sınıf tanımlanır. İnşacı tasarım deseni de genellikle metot zincirleme yoluyla uygulanır
java.lang.StringBuilder#append()
java.lang.StringBuffer#append()
java.sql.PreparedStatement
javax.swing.GroupLayout.Group#addComponent()
3,Fabrika metodu
Somut bir nesne döndüren bir metottur
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,Prototip deseni
Bir sınıf örneğinin kendi kopyasını oluşturabilmesini sağlar. Bir nesne örneğini oluşturmak çok karmaşık ve zaman alıcıysa bu desen kullanılabilir; yeni bir örneği baştan oluşturmak yerine bir nesneyi kopyalayıp doğrudan değiştirebilirsiniz
java.lang.Object#clone()
java.lang.Cloneable
5,Singleton tasarım deseni
Bir sınıfın yalnızca tek bir örneğe sahip olmasını sağlamak için kullanılır. Joshua Bloch, Effetive Java'da başka bir yöntem olarak numaralandırma kullanılmasını da önerir
java.lang.Runtime#getRuntime()
java.awt.Toolkit#getDefaultToolkit()
java.awt.GraphicsEnvironment#getLocalGraphicsEnvironment()
java.awt.Desktop#getDesktop()
Üç, davranışsal desenler
1,Sorumluluk Zinciri tasarım deseni
İstek, işlenmesi tamamlanana kadar bir nesneden zincirdeki bir sonraki nesneye aktarılır; böylece nesneler arasındaki bağımlılık azaltılır
java.util.logging.Logger#log()
javax.servlet.Filter#doFilter()
2,Komut tasarım deseni
İşlemleri saklamak, aktarmak ve döndürmek için bir nesnenin içinde kapsüllemek
java.lang.Runnable
javax.swing.Action
3,Yorumlayıcı deseni
Bu örüntü genellikle bir dilin dilbilgisini tanımlar, ardından bu dilbilgisine uyan ifadeleri ayrıştırır
java.util.Pattern
java.text.Normalizer
java.text.Format
4,Yineleyici tasarım deseni
Bir koleksiyondaki nesnelere sırayla erişmek için, alttaki koleksiyonun somut uygulamasından bağımsız, tutarlı bir yöntem sunar
java.util.Iterator
java.util.Enumeration
5,Arabulucu tasarım deseni
Mesajları dağıtmak ve sınıflar arasındaki doğrudan bağımlılıkları azaltmak için bir aracı nesne kullanmak
java.util.Timer
java.util.concurrent.Executor#execute()
java.util.concurrent.ExecutorService#submit()
java.lang.reflect.Method#invoke()
6,Memento deseni
Nesnenin içeriğini açığa çıkarmadan özgün durumuna dönebilmesi için durumunun bir anlık görüntüsünü oluşturur. Date nesnesi, kendi içindeki bir long değeri aracılığıyla Memento desenini uygular
java.util.Date
java.io.Serializable
7,Boş Nesne deseni
Bu desen, nesnenin bulunmadığı durumu temsil etmek için anlam taşımayan bir nesne kullanır。Böylece null nesneleri ayrıca ele almanız gerekmez
java.util.Collections#emptyList()
java.util.Collections#emptyMap()
java.util.Collections#emptySet()
8,Gözlemci deseni
Bir nesnenin, ilgilenen nesnelere esnek bir şekilde mesaj göndermesini sağlar
java.util.EventListener
javax.servlet.http.HttpSessionBindingListener
javax.servlet.http.HttpSessionAttributeListener
javax.faces.event.PhaseListener
9,Durum tasarım deseni
Nesnenin iç durumunu değiştirerek çalışma zamanında davranışını dinamik olarak değiştirmenizi sağlar
java.util.Iterator
javax.faces.lifecycle.LifeCycle#execute()
10,Strateji tasarım deseni
Bu desen, bir grup algoritmayı bir dizi nesne içinde kapsüllemek için kullanılır. Bu nesneler parametre olarak geçirilerek programın işlevleri esnek biçimde değiştirilebilir
java.util.Comparator#compare()
javax.servlet.http.HttpServlet
javax.servlet.Filter#doFilter()
11,Şablon Yöntem tasarım deseni
Alt sınıfın metodun tamamı yerine bir bölümünü yeniden tanımlamasını sağlar,alt sınıfın hangi işlemleri yeniden tanımlaması gerektiğini kontrol edebilirsiniz
java.util.Collections#sort()
java.io.InputStream#skip()
java.io.InputStream#read()
java.util.AbstractList#indexOf()
12,Ziyaretçi tasarım deseni
Bir nesne grubu üzerinde işlem yapmak için kullanışlı ve bakımı kolay bir yol sağlar. Üzerinde işlem yapılan nesneleri değiştirmeden onların davranışlarını değiştirmenize veya genişletmenize olanak tanır
javax.lang.model.element.Element ve javax.lang.model.element.ElementVisitor
javax.lang.model.type.TypeMirror ve javax.lang.model.type.TypeVisitor
Çevirmenin notu: Birçok nokta tartışmalı olabilir. Bunların belirli bir desen sayılıp sayılmadığı aslında pek önemli değildir; önemli olan, tasarımlarının kodumuzu iyileştirmek için bize bazı deneyimler kazandırabilmesidir