1. ホーム
  2. oop

[解決済み] Java のコア・ライブラリにおける GoF デザイン・パターンの例

2022-03-15 16:27:36

質問

GoFのJavaデザインパターンを学んでいるのですが、その実例を見たいのです。Javaのコア・ライブラリで、これらのデザイン・パターンの良い例があれば教えてください。

どのように解決するのですか?

多くのデザインパターンの概要については ウィキペディア . また、GoFがどのパターンに言及しているかについても言及されています。ここでは、それらをまとめて、Java SEとJava EEの両方のAPIで見られる、できるだけ多くのパターン実装を割り当ててみることにする。


作成パターン

抽象的な工場 <サブ (ファクトリー自身を返す作成メソッドで認識でき、それを使って別の抽象型/インターフェース型を作成できる)

ビルダー <サブ (インスタンス自身を返す作成メソッドで認識可能)。

ファクトリーメソッド <サブ (抽象型/インターフェース型の実装を返す作成メソッドで認識可能)。

プロトタイプ <サブ (を返す作成メソッドで認識可能)。 異なる のインスタンス)

シングルトン <サブ (を返す作成メソッドで認識可能)。 同じ のインスタンス(通常はそれ自身)を毎回作成します。)


構造パターン

アダプタ <サブ (のインスタンスを取る作成メソッドで認識可能)。 異なる 抽象/インターフェース型の実装を返します。 を装飾/オーバーライドする 与えられたインスタンス)

ブリッジ <サブ (のインスタンスを取る作成方法によって認識される)。 異なる 抽象/インターフェース型の実装を返します。 デリゲート/ユース 与えられたインスタンス)

  • まだ何も思い浮かびません。架空の例を挙げると new LinkedHashMap(LinkedHashSet<K>, List<V>) これは、アイテムのクローンを作らない、変更不可能なリンクされたマップを返しますが を使用します。その java.util.Collections#newSetFromMap() singletonXXX() というメソッドがありますが、それに近いものがあります。

コンポジット <サブ (のインスタンスを取る動作メソッドで認識可能)。 同じ 抽象型/インターフェース型を木構造に変換)

デコレーター <サブ (のインスタンスを取る作成メソッドで認識可能)。 同じ 抽象/インターフェース型であり、追加の挙動を追加する)

ファサード <サブ (のインスタンスを内部で使用する動作メソッドで認識できます。 異なる 独立した抽象型/インターフェース型)

フライ級 <サブ (キャッシュされたインスタンスを返す作成メソッドで認識可能で、ちょっとした "multiton" のようなアイデア)

プロキシ <サブ (与えられた抽象/インターフェース型の実装を返す作成メソッドによって認識され、その実装は次に デリゲート/ユース a 異なる の実装)


ビヘイビアパターン

責任の連鎖 <サブ (の同じメソッドを(間接的に)呼び出すビヘイビアメソッドで認識できる)。 別の の実装は 同じ 抽象/インターフェース型(キュー内)

コマンド <サブ (の実装にあるメソッドを呼び出す抽象/インターフェース型の動作メソッドで認識可能)。 異なる 抽象/インターフェース型 カプセル化 を作成する際に、コマンドの実装によって)

インタープリター <サブ (を返す動作メソッドで認識できる)。 構造的に パースやフォーマットはパターンの一部ではなく、パターンの決定とその適用方法であることに注意してください)

イテレータ <サブ (のインスタンスを順次返す動作メソッドで認識可能)。 異なる 型をキューから取り出す)

メディエーター <サブ (与えられたインスタンスを委譲/使用する別の抽象/インターフェース型(通常はコマンドパターンを使用)のインスタンスを取る動作メソッドによって認識される)

メメント <サブ (の状態を内部的に変化させるビヘイビアメソッドで認識可能)。 全体 インスタンス)

オブザーバー(またはパブリッシュ/サブスクライブ) <サブ (のインスタンスに対してメソッドを呼び出す動作メソッドで認識可能)。 別の 抽象型/インターフェース型、自身の状態による)

状態 <サブ (外部から制御できるインスタンスの状態に応じて振る舞いを変えるビヘイビアメソッドで認識可能)。

戦略 <サブ (の実装のメソッドを呼び出す抽象/インターフェース型の動作メソッドで認識可能)。 異なる 抽象/インターフェース型 パスイン ストラテジーの実装にメソッドの引数として渡す)

テンプレート方式 <サブ (抽象型によって定義された "default" の振る舞いを既に持っている振る舞いメソッドによって認識可能)

訪問者 <サブ (2つの 異なる をそれぞれ受け取るメソッドが定義されている抽象/インターフェース型です。 他の 抽象/インターフェース型; 一方が他方のメソッドを実際に呼び出し、他方がそれに対して望ましい戦略を実行する)