Відповіді:
Ви можете знайти огляд багатьох моделей дизайну у Вікіпедії . Він також згадує, які зразки згадує Міністр фінансів. Я підсумую їх тут і спробую призначити якомога більше реалізацій шаблону, які можна знайти як в API SE SE, так і в Java EE.
javax.xml.parsers.DocumentBuilderFactory#newInstance()
javax.xml.transform.TransformerFactory#newInstance()
javax.xml.xpath.XPathFactory#newInstance()
java.lang.StringBuilder#append()
(несинхронізований)java.lang.StringBuffer#append()
(синхронізовано)java.nio.ByteBuffer#put()
(Також на CharBuffer
, ShortBuffer
, IntBuffer
, LongBuffer
, FloatBuffer
і 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)
(Повертає одиночний об'єкт за протоколом)java.util.EnumSet#of()
javax.xml.bind.JAXBContext#createMarshaller()
та інші подібні методиjava.lang.Object#clone()
(клас повинен реалізувати java.lang.Cloneable
)java.util.Arrays#asList()
java.util.Collections#list()
java.util.Collections#enumeration()
java.io.InputStreamReader(InputStream)
(повертає a Reader
)java.io.OutputStreamWriter(OutputStream)
(повертає a Writer
)javax.xml.bind.annotation.adapters.XmlAdapter#marshal()
і #unmarshal()
new LinkedHashMap(LinkedHashSet<K>, List<V>)
повернення немодифікованої пов'язаної карти, яка не клонує елементи, а використовує їх. Однак методи java.util.Collections#newSetFromMap()
і singletonXXX()
наближаються.java.awt.Container#add(Component)
(практично по всьому Swing таким чином)javax.faces.component.UIComponent#getChildren()
(практично по всьому JSF UI таким чином)java.io.InputStream
, OutputStream
, Reader
і Writer
є конструктор , який приймає екземпляр того ж типу.java.util.Collections
, То checkedXXX()
, synchronizedXXX()
і unmodifiableXXX()
методи.javax.servlet.http.HttpServletRequestWrapper
і HttpServletResponseWrapper
javax.swing.JScrollPane
javax.faces.context.FacesContext
Він внутрішньо використовує серед інших абстрактних типів / інтерфейсу LifeCycle
, ViewHandler
, NavigationHandler
і багато іншого без того , щоб кінцевий користувач повинен турбуватися про це (які , однак, що переписуються шляхом ін'єкції).javax.faces.context.ExternalContext
, Який використовується всередині ServletContext
, HttpSession
, HttpServletRequest
, HttpServletResponse
і т.д.java.lang.Integer#valueOf(int)
(Також на Boolean
, Byte
, Character
, Short
, Long
і BigDecimal
)java.lang.reflect.Proxy
java.rmi.*
javax.ejb.EJB
( пояснення тут )javax.inject.Inject
( пояснення тут )javax.persistence.PersistenceContext
java.lang.Runnable
javax.swing.Action
java.util.Pattern
java.text.Normalizer
java.text.Format
javax.el.ELResolver
java.util.Iterator
(таким чином, серед інших також java.util.Scanner
!).java.util.Enumeration
java.util.Timer
(усі scheduleXXX()
методи)java.util.concurrent.Executor#execute()
java.util.concurrent.ExecutorService
( invokeXXX()
та submit()
методи)java.util.concurrent.ScheduledExecutorService
(усі scheduleXXX()
методи)java.lang.reflect.Method#invoke()
java.util.Date
(методи сеттера роблять це, Date
внутрішньо представлені long
значенням)java.io.Serializable
javax.faces.component.StateHolder
java.util.Observer
/ java.util.Observable
(рідко використовується в реальному світі)java.util.EventListener
(практично на всьому Swing таким чином)javax.servlet.http.HttpSessionBindingListener
javax.servlet.http.HttpSessionAttributeListener
javax.faces.event.PhaseListener
javax.faces.lifecycle.LifeCycle#execute()
(контролюється FacesServlet
поведінка залежить від поточної фази (стану) життєвого циклу JSF)java.util.Comparator#compare()
, виконаний серед інших Collections#sort()
.javax.servlet.http.HttpServlet
, і, service()
і всі doXXX()
методи беруть HttpServletRequest
і, HttpServletResponse
і реалізатор повинен їх обробити (а не отримувати їх як змінні екземпляри!).javax.servlet.Filter#doFilter()
java.io.InputStream
, java.io.OutputStream
, java.io.Reader
і java.io.Writer
.java.util.AbstractList
, java.util.AbstractSet
і java.util.AbstractMap
.javax.servlet.http.HttpServlet
, всі doXXX()
методи за замовчуванням надсилають у відповідь помилку HTTP 405 "Метод не дозволений". Ви можете реалізувати жоден або будь-який із них.Observable
, Observer
)ContainerAdapter
, ComponentAdapter
, FocusAdapter
, KeyAdapter
, MouseAdapter
є НЕ адаптери; вони є насправді Нульовими Об'єктами. Поганий вибір імені від Sun.BufferedInputStream
може прикрашати інші потоки, такі як FilterInputStream
)java.lang.Runtime#getRuntime()
є СінглтонButtonGroup
для моделі «Медіатор»Action
, AbstractAction
може використовуватися для різних візуальних зображень для виконання одного і того ж коду -> Командний шаблоні багато іншого я здогадуюсь
clone()
метод може бути використаний для цієї мети.java.awt
та java.swing
пакети. Дійсно, вони поділяють майже однакові внутрішні атрибути, а зовнішні атрибути - це різні компоненти інтерфейсу, які вони викладають у формі інтерфейсу.
RMI заснований на проксі.
Потрібно навести один для більшості з 23 моделей у GoF:
Я не можу придумати приклади на Java для 10 з 23, але я побачу, чи зможу завтра краще. Саме для цього потрібна редакція.
Незважаючи на те, що я начебто зламаний годинник з цим, API Java XML дуже багато використовує Factory. Я маю на увазі просто подивіться на це:
Document doc = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(source);
String title = XPathFactory.newInstance().newXPath().evaluate("//title", doc);
... і так далі, і так далі.
Додатково різні буфери (StringBuffer, ByteBuffer, StringBuilder) використовують Builder.
java.util.Collection # Ітератор - хороший приклад заводського методу. Залежно від конкретного підкласу колекції, який ви використовуєте, він створить реалізацію Iterator. Оскільки і створений фабричний надклас (Колекція), і створений Ітератор є інтерфейсами, його іноді плутають із AbstractFactory. Більшість прикладів AbstractFactory у прийнятій відповіді (BalusC) - це приклади Фабрики , спрощеної версії Фабричного методу, яка не є частиною оригінальних моделей GoF. У Facory ієрархія класу Factory зведена, і фабрика використовує інші засоби для вибору продукту, який потрібно повернути.
Абстрактна фабрика має кілька заводських методів, кожен створює різний продукт. Продукція, що випускається однією фабрикою, призначена для використання разом (ваш принтер і картриджі краще бути з того ж (абстрактного) заводу). Як зазначено у відповідях вище, сімейства компонентів графічного інтерфейсу AWT, що відрізняються від платформи до платформи, є прикладом цього (хоча його реалізація відрізняється від структури, описаної в Gof).
javax.lang.model.element
визначає відвідувачів;) Я не зовсім впевнений в тому ,doXXX
іdoFilter
в «стратегії».