Ana içeriğe geç

CooLWJ'de ara

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

Dil

JDK'de hangi tasarım desenleri kullanılıyor?

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


Java kahve fincanı ve montaj sahnesiyle yazılım tasarımını anlatan bir illüstrasyon

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


Yorumlar

Gönderiliyor

Temanızı seçin

Temanız tüm sitede geçerli olur.