답변:
Wikipedia 에서 많은 디자인 패턴에 대한 개요를 찾을 수 있습니다 . 또한 GoF에서 언급 한 패턴을 언급합니다. 여기에 그것들을 요약하고 Java SE 및 Java EE API에서 모두 가능한 한 많은 패턴 구현을 할당하려고합니다.
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)
(를 반환 Reader
)java.io.OutputStreamWriter(OutputStream)
(를 반환 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)
(실제로 스윙 전체에)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.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 "Method Not Allowed"오류를 응답으로 보냅니다. 당신은 그들 중 어느 것도 또는 자유롭게 구현할 수 없습니다.Observable
, Observer
)ContainerAdapter
, ComponentAdapter
, FocusAdapter
, KeyAdapter
, MouseAdapter
입니다 하지 어댑터; 그것들은 실제로 널 오브젝트입니다. Sun의 이름이 잘못 지정되었습니다.BufferedInputStream
와 같은 다른 스트림을 장식 할 수 있음 FilterInputStream
)java.lang.Runtime#getRuntime()
싱글턴입니다ButtonGroup
중재자 패턴Action
, AbstractAction
동일한 코드를 실행하는 다른 시각적 표현에 사용될 수있다 -> 커맨드 패턴그리고 더 많은 것 같아
clone()
방법으로 사용할 수 있다고 생각합니다.java.awt
와 java.swing
패키지 가 다를 수 있습니다 . 실제로, 그들은 거의 동일한 고유 속성을 공유하고 외부 속성은 UI 형식으로 배치되는 다른 UI 구성 요소입니다.
RMI는 프록시를 기반으로합니다.
GoF에서 23 가지 패턴 중 하나를 인용 할 수 있어야합니다.
23 개 중 10 개에 대한 Java 예제는 생각할 수 없지만 내일 더 잘할 수 있는지 볼 수 있습니다. 그것이 편집을위한 것입니다.
이 시계로 고장난 시계이지만 Java XML API는 Factory를 많이 사용합니다. 나는 이것 만 봐라.
Document doc = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(source);
String title = XPathFactory.newInstance().newXPath().evaluate("//title", doc);
... 등등.
또한 다양한 버퍼 (StringBuffer, ByteBuffer, StringBuilder)는 Builder를 사용합니다.
java.util.Collection # Iterator는 팩토리 메소드의 좋은 예입니다. 사용하는 Collection의 구체적 서브 클래스에 따라 Iterator 구현이 작성됩니다. Factory 슈퍼 클래스 (Collection)와 생성 된 Iterator는 모두 인터페이스이기 때문에 때때로 AbstractFactory와 혼동됩니다. 허용 된 답변 (BalusC)에서 AbstractFactory에 대한 대부분의 예제는 Factory Go의 패턴이 아닌 Factory Method의 단순화 된 버전 인 Factory의 예제입니다 . Facory에서 팩토리 클래스 계층 구조가 축소되고 팩토리는 다른 방법을 사용하여 반품 할 제품을 선택합니다.
추상 팩토리에는 각각 다른 제품을 생성하는 여러 팩토리 메소드가 있습니다. 한 공장에서 생산 된 제품은 함께 사용하도록 고안되었습니다 (프린터와 카트리지는 동일한 (추상) 공장에서 제조하는 것이 좋습니다). 위의 답변에서 언급했듯이 플랫폼마다 다른 AWT GUI 구성 요소 제품군은 이에 대한 예입니다 (구현 방법은 Gof에 설명 된 구조와 다릅니다).
javax.lang.model.element
방문자를 정의) 나는 확실히인지 확실하지 않다doXXX
과doFilter
"전략"입니다.