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, FloatBufferve DoubleBuffer)javax.swing.GroupLayout.Group#addComponent()java.lang.Appendablejava.util.stream.Stream.Builderjava.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, Readerve Writeraynı türde bir örneğini alarak bir kurucuya sahip.java.util.Collections, checkedXXX(), synchronizedXXX()Ve unmodifiableXXX()yöntemler.javax.servlet.http.HttpServletRequestWrapper ve HttpServletResponseWrapperjavax.swing.JScrollPanejavax.faces.context.FacesContext, Dahili olarak diğerleri arasında soyut / arayüz türlerini kullanır LifeCycle, ViewHandler, NavigationHandlerson 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, Longve BigDecimal)java.lang.reflect.Proxyjava.rmi.*javax.ejb.EJB( açıklama burada )javax.inject.Inject( açıklama burada )javax.persistence.PersistenceContextjava.lang.Runnablejavax.swing.Actionjava.util.Patternjava.text.Normalizerjava.text.Formatjavax.el.ELResolverjava.util.Iterator(böylece diğerleri arasında java.util.Scanner!).java.util.Enumerationjava.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 longdeğerle temsil edilir )java.io.Serializablejavax.faces.component.StateHolderjava.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.HttpSessionBindingListenerjavax.servlet.http.HttpSessionAttributeListenerjavax.faces.event.PhaseListenerjavax.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 HttpServletRequestve HttpServletResponseuygulayı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.Readerve java.io.Writer.java.util.AbstractList, java.util.AbstractSetve 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, MouseAdaptervardır değil adaptörleri; bunlar aslında Boş Nesnelerdir. Sun'ın kötü adlandırma seçeneği.BufferedInputStreamgibi diğer akışları süsleyebilir FilterInputStream)java.lang.Runtime#getRuntime() SingletonButtonGroup Arabulucu deseni içinAction, AbstractActionaynı 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.awtve java.swingpaketler. 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.elementziyaretçileri tanımlar;) Pek emin olmadığını değilimdoXXXvedoFilter"stratejileri" dir.