6

リアルタイムの例で設計パターンを学びたいです。だから、誰でも私がどこから始めることができるかを提案できます.

4

4 に答える 4

31

これらの古典的なデザイン パターンは、すべての開発者が理解する必要があります。これは、他の開発者の抽象的なレベルとのコミュニケーションに役立ち、より優れた設計者になるためです。

注:実生活と Java API の例を使用して簡単な定義を追加します。

創造的な

オブジェクトの作成方法。

プロトタイプ :コピーまたは複製される完全に初期化されたインスタンス
例 : チェス ゲームの初期状態

  • java.lang.Object#clone()

ビルダー- 複雑なオブジェクトの構築をその表現から分離して、同じ構築プロセスで異なる表現を作成できるようにします。
例 : ピザを作る (または注文する) 場合 (サイズとフレーバーが異なる場合があります)

  • java.lang.StringBuilder

シングルトン- 単一のインスタンスしか存在できないクラス
例: 大統領

  • java.lang.Runtime#getRuntime()

ファクトリ メソッド-オブジェクト タイプのファミリを作成します。
例 : ある組織では、HR がファクトリ メソッドとして機能します。ここで、開発チームは、HR に必要なリソースのタイプを要求します。リクエストの種類に基づいて、HR は開発チームにリソースを提供します。

  • java.util.Calendar#getInstance()

抽象ファクトリ- クラスのいくつかのファミリのインスタンスを作成します
。例: HP、Samsung、および Dell のラップトップは、Intel および AMD プロセッサを使用しています。

  • javax.xml.parsers.DocumentBuilderFactory#newInstance()

ファクトリメソッドと抽象ファクトリ

構造的

この設計パターンは、クラスとオブジェクトの構成に関するものです。つまり、ソフトウェア コンポーネントをどのように構造化しますか。これにより、パーツの 1 つが変更されても、構造全体を変更する必要がないことが保証されます。

プロキシ- 別のオブジェクトを表すオブジェクト。
例 : 小切手帳の葉、クレジット カード、デビット カードは、Money および顧客担当者が製品を注文するための代理です。

  • java.rmi.*、実際には API 全体です。

Composite - リーフとコンポジットに統一されたインターフェースを提供します.
例 : オペレーティング システムのファイル システム、ディレクトリはコンポジット、ファイルはリーフです。システム コールOpenは、コンポジットとリーフの両方で単一のインターフェイスです。

Decorator - 統一されたインターフェースを提供しながら、オブジェクトに追加機能を提供します。
例 : 1) 注文に割引を追加する2) 銃はそれ自体が致命的な武器です。ただし、特定の「装飾」を適用して、より正確で静かで壊滅的なものにすることができます。

  • java.io.InputStream、OutputStream、Reader、および Writer のすべてのサブクラスには、同じ型のインスタンスを取るコンストラクターがあります。

Facade - サブシステム全体を表す単一のインターフェイス。
例 : コントロール パネル、イベント マネージャー。

  • ServletContext、HttpSession、HttpServletRequest、HttpServletResponse などを内部的に使用する javax.faces.context.ExternalContext

アダプター- インターフェイスにさまざまなインターフェイスを提供します。
例:電源アダプター

  • java.util.Arrays#asList()

Flyweight - 効率的な共有に使用されるきめの細かいインスタンス
例: Flyweight は効率的な多数のオブジェクトをサポートするために共有を使用しますhttps://refactoring.guru/design-patternsly。公衆交換電話網は Flyweight の一例です。すべてのサブスクライバ間で共有する必要があるダイヤル トーン ジェネレータ、リンギング ジェネレータ、ディジット レシーバなど、いくつかのリソースがあります。加入者は、電話をかけるためにハンドセットを持ち上げたときに、プールにあるリソースの数を認識していません。加入者にとって重要なことは、ダイヤル トーンが提供され、数字が受信され、通話が完了することだけです。

  • java.lang.Integer#valueOf(int) (Boolean、Byte、Character、Short、Long についても)

行動

この設計パターンは、特にオブジェクト間の通信に関係しています。

責任の連鎖- 一連のオブジェクト間で要求を渡す方法
例: ローンまたは休暇の承認プロセス、Java での例外処理。

  • javax.servlet.Filter#doFilter()

イテレータ- コレクションの要素に順次アクセスする
例: TV の [次へ/前へ] ボタン

  • java.util.Iterator と java.util.Enumeration のすべての実装

状態- 状態が変化したときにオブジェクトの動作を変更します
例: ファン ウォール コントロール

オブザーバー- いくつかのクラスへの変更を通知する方法
例: 入札またはオークション

  • パブリッシュ/サブスクライブ JMS API

Visitor - 変更なしでクラスに新しい操作を定義します。例:タクシー

テンプレート- 操作でアルゴリズムのスケルトンを定義し、いくつかのステップをサブクラスに任せます。
例:ブループリント

  • 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" エラーを応答に送信します。何も実装しないか、どれかを自由に実装できます。
  • JMSTemplate Spring の HibernateTemplate と JdbcTemplate

コマンド- コマンド要求をオブジェクトとしてカプセル化します
。 例: ダイナーでの「ゲスト チェック」は、コマンド パターンの例です。ウェイターまたはウェイトレスは、顧客から注文またはコマンドを受け取り、小切手に書き込むことでその注文をカプセル化します。その後、注文はショート オーダー クックのキューに入れられます。各ウェイターが使用する「チェック」のパッドはメニューに依存しないため、多くの異なるアイテムを調理するコマンドをサポートできることに注意してください。

  • java.lang.Runnable のすべての実装

Memento - オブジェクトの内部状態をキャプチャして復元する
例: ゲームで状態を保存し、Windows で元に戻す/やり直し操作を行う

  • java.io.Serializable のすべての実装

Mediator - クラス間の簡略化された通信を定義します
例: 航空管制官 (ATC)

ストラテジー- ストラテジーは、互換的に使用できる一連のアルゴリズムを定義します。
例:交通手段

  • java.util.Comparator#compare()、とりわけ Collections#sort() によって実行されます。
  • javax.servlet.http.HttpServlet、service() およびすべての doXXX() メソッドは HttpServletRequest および HttpServletResponse を受け取り、実装者はそれらを処理する必要があります (インスタンス変数として取得しないでください!)。
  • javax.servlet.Filter#doFilter()

Java で実装されたデザイン パターン
デザイン パターンと簡単な例

于 2015-07-16T23:15:32.520 に答える
2

私はこれらが2つの標準的な参照であると信じています:

  1. ヘッドファーストデザインパターン
  2. デザインパターン

私が聞いたところによると、最初の方が簡単に始められます。

これを調査するために私が取った手順:

  1. グーグル「デザインパターンブック」
  2. この質問を読む
于 2012-07-19T04:13:24.960 に答える
0

C#デザインパターンをお探しの場合は、以下を参照してください。

「C#デザインパターンのチュートリアル」-Jame W Cooper

于 2012-07-19T04:16:25.090 に答える