回答:
ウィキペディアで多くのデザインパターンの概要を見つけることができます。また、GoFによってどのパターンが言及されているかも言及しています。ここではそれらをまとめて、Java SE APIと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)
(したがって、実質的に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
エンドユーザーは、注射(但しoverrideableある)それを心配する持っていることをせずに、より多くの。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
and 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
ありませんアダプター。それらは実際にはNullオブジェクトです。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)はビルダーを使用します。
java.util.Collection#Iteratorは、ファクトリメソッドの良い例です。使用するコレクションの具象サブクラスに応じて、イテレーター実装が作成されます。Factoryスーパークラス(コレクション)と作成されたイテレーターの両方がインターフェースであるため、AbstractFactoryと混同される場合があります。受け入れ答え(BalusC)でAbstractFactoryの例のほとんどは、の例である工場、オリジナルのGoFパターンの一部ではないファクトリメソッドの簡易版。Facoryでは、Factoryクラス階層が縮小され、ファクトリーは他の手段を使用して、返される製品を選択します。
抽象ファクトリには複数のファクトリメソッドがあり、それぞれが異なる製品を作成します。1つの工場で生産された製品は、一緒に使用することを目的としています(プリンターとカートリッジは同じ(抽象的な)工場のものを使用することをお勧めします)。上記の回答で述べたように、AWT GUIコンポーネントのファミリーは、プラットフォームごとに異なります(ただし、その実装はGofで説明されている構造とは異なります)。
javax.lang.model.element
訪問者を定義しています。)私はかなり確実かどうかじゃないdoXXX
とdoFilter
「戦略」です。