Yanıtlar:
Wikipedia'da birçok tasarım desenine genel bir bakış bulabilirsiniz . Ayrıca, GoF tarafından hangi kalıplardan bahsedildiğinden bahsedilmektedir. Bunları burada toplayacağım ve hem Java SE hem de Java EE API'lerinde bulunan mümkün olduğunca çok desen uygulaması atamaya çalışacağım.
javax.xml.parsers.DocumentBuilderFactory#newInstance()
javax.xml.transform.TransformerFactory#newInstance()
javax.xml.xpath.XPathFactory#newInstance()
java.lang.StringBuilder#append()
(Eşitlenmemiş)java.lang.StringBuffer#append()
(Senkronize)java.nio.ByteBuffer#put()
(ayrıca CharBuffer
, ShortBuffer
, IntBuffer
, LongBuffer
, FloatBuffer
ve 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)
(Protokol başına tekil nesne döndürür)java.util.EnumSet#of()
javax.xml.bind.JAXBContext#createMarshaller()
ve diğer benzer yöntemlerjava.lang.Object#clone()
(sınıf uygulamak zorundadır java.lang.Cloneable
)java.util.Arrays#asList()
java.util.Collections#list()
java.util.Collections#enumeration()
java.io.InputStreamReader(InputStream)
(a döndürür Reader
)java.io.OutputStreamWriter(OutputStream)
(a döndürür Writer
)javax.xml.bind.annotation.adapters.XmlAdapter#marshal()
ve #unmarshal()
new LinkedHashMap(LinkedHashSet<K>, List<V>)
, öğeleri klonlamayan, ancak bunları kullanan değiştirilemeyen bağlantılı bir harita döndürür . java.util.Collections#newSetFromMap()
Ve singletonXXX()
yöntemler ancak yakın geliyor.java.awt.Container#add(Component)
(pratikte tüm Salıncakta)javax.faces.component.UIComponent#getChildren()
(pratikte tüm JSF kullanıcı arayüzünde)java.io.InputStream
, OutputStream
, Reader
ve Writer
aynı türde bir örneğini alarak bir kurucuya sahip.java.util.Collections
, checkedXXX()
, synchronizedXXX()
Ve unmodifiableXXX()
yöntemler.javax.servlet.http.HttpServletRequestWrapper
ve HttpServletResponseWrapper
javax.swing.JScrollPane
javax.faces.context.FacesContext
, Dahili olarak diğerleri arasında soyut / arayüz türlerini kullanır LifeCycle
, ViewHandler
, NavigationHandler
son kullanıcı (enjeksiyon yoluyla ancak geçersiz kılınamaz olan) bu konuda endişe zorunda olduğu olmadan ve daha çok fazlası.javax.faces.context.ExternalContext
, Dahili olarak kullandığı ServletContext
, HttpSession
, HttpServletRequest
, HttpServletResponse
, vbjava.lang.Integer#valueOf(int)
(ayrıca Boolean
, Byte
, Character
, Short
, Long
ve BigDecimal
)java.lang.reflect.Proxy
java.rmi.*
javax.ejb.EJB
( açıklama burada )javax.inject.Inject
( açıklama burada )javax.persistence.PersistenceContext
java.lang.Runnable
javax.swing.Action
java.util.Pattern
java.text.Normalizer
java.text.Format
javax.el.ELResolver
java.util.Iterator
(böylece diğerleri arasında java.util.Scanner
!).java.util.Enumeration
java.util.Timer
(tüm scheduleXXX()
yöntemler)java.util.concurrent.Executor#execute()
java.util.concurrent.ExecutorService
( invokeXXX()
ve submit()
yöntemleri)java.util.concurrent.ScheduledExecutorService
(tüm scheduleXXX()
yöntemler)java.lang.reflect.Method#invoke()
java.util.Date
(ayarlayıcı yöntemler bunu yapar Date
, dahili olarak bir long
değerle temsil edilir )java.io.Serializable
javax.faces.component.StateHolder
java.util.Observer
/ java.util.Observable
(nadiren gerçek dünyada kullanılır)java.util.EventListener
(böylece neredeyse tüm Swing üzerinden)javax.servlet.http.HttpSessionBindingListener
javax.servlet.http.HttpSessionAttributeListener
javax.faces.event.PhaseListener
javax.faces.lifecycle.LifeCycle#execute()
(tarafından kontrol edilir FacesServlet
, davranış JSF yaşam döngüsünün geçerli fazına (durumuna) bağlıdır)java.util.Comparator#compare()
, diğerleri tarafından idam Collections#sort()
.javax.servlet.http.HttpServlet
, service()
ve tüm doXXX()
yöntemler alır HttpServletRequest
ve HttpServletResponse
uygulayıcı bunları işlemek zorundadır (ve bunları örnek değişkenleri olarak ele almamak için!).javax.servlet.Filter#doFilter()
java.io.InputStream
, java.io.OutputStream
, java.io.Reader
ve java.io.Writer
.java.util.AbstractList
, java.util.AbstractSet
ve java.util.AbstractMap
.javax.servlet.http.HttpServlet
, doXXX()
varsayılan olarak tüm yöntemler yanıta bir HTTP 405 "Yöntem İzin Verilmez" hatası gönderir. Hiçbirini veya hiçbirini uygulamakta özgürsünüz.Observable
, Observer
)ContainerAdapter
, ComponentAdapter
, FocusAdapter
, KeyAdapter
, MouseAdapter
vardır değil adaptörleri; bunlar aslında Boş Nesnelerdir. Sun'ın kötü adlandırma seçeneği.BufferedInputStream
gibi diğer akışları süsleyebilir FilterInputStream
)java.lang.Runtime#getRuntime()
SingletonButtonGroup
Arabulucu deseni içinAction
, AbstractAction
aynı kodu çalıştırmak için farklı görsel temsiller için kullanılabilir -> Komut desenive daha pek çoğu sanırım
clone()
bu amaç için thinkg yöntemi kullanılabilir.java.awt
ve java.swing
paketler. Aslında, neredeyse özdeş öznitelikleri paylaşırlar ve dış öznitelikler UI formunda düzenledikleri farklı UI bileşenleridir.
RMI, Proxy'yi temel alır.
GoF'deki 23 modelin çoğu için bir alıntı yapmak mümkün olmalıdır:
23'ten 10'u için Java'daki örnekleri düşünemiyorum, ama yarın daha iyisini yapıp yapamayacağımı göreceğim. Düzenleme bunun için.
Bununla bir tür kırık bir saat olmasına rağmen, Java XML API Factory'yi çok kullanıyor. Yani şuna bir bakın:
Document doc = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(source);
String title = XPathFactory.newInstance().newXPath().evaluate("//title", doc);
... ve benzerleri.
Ayrıca çeşitli Tamponlar (StringBuffer, ByteBuffer, StringBuilder) Builder'ı kullanır.
java.util.Collection # Iterator bir Fabrika Yöntemi'nin iyi bir örneğidir. Kullandığınız Koleksiyonun somut alt sınıfına bağlı olarak, bir Yineleyici uygulaması oluşturacaktır. Hem Fabrika üst sınıfı (Koleksiyon) hem de oluşturulan Yineleyici arabirimler olduğundan, bazen AbstractFactory ile karıştırılır. Kabul cevap (BalusC) 'de AbstractFactory için örneklerin çoğu örnekleridir Fabrikası , özgün GoF kalıplarının parçası değildir Fabrika Yöntemi, basitleştirilmiş sürümü. Facory'de Factory sınıfı hiyerarşisi çöker ve fabrika, iade edilecek ürünü seçmek için başka yöntemler kullanır.
Soyut bir fabrikada, her biri farklı bir ürün oluşturan birden fazla fabrika yöntemi vardır. Bir fabrika tarafından üretilen ürünlerin birlikte kullanılması amaçlanmıştır (yazıcınız ve kartuşlarınız aynı (soyut) fabrikadan alınmalıdır). Yukarıdaki yanıtlarda belirtildiği gibi, platformdan platforma farklılık gösteren AWT GUI bileşenlerinin aileleri bunun bir örneğidir (uygulaması Gof'ta açıklanan yapıdan farklı olsa da).
javax.lang.model.element
ziyaretçileri tanımlar;) Pek emin olmadığını değilimdoXXX
vedoFilter
"stratejileri" dir.