ファサード、プロキシ、アダプター、デコレーターのデザインパターンの違いは? [閉まっている
-
28-09-2019 - |
質問
ファサード、プロキシ、アダプター、デコレーターのデザインパターンの違いは何ですか?
私は明確な説明を読んだことがありません、あなたのものは何ですか?
解決
アダプタ 特定のクラス/オブジェクトを新しいインターフェイスに適応させます。前者の場合、複数の継承が通常採用されます。後者の場合、オブジェクトは適合アダプターオブジェクトによって包まれて渡されます。ここで解決している問題はの問題です 互換性のないインターフェイス.
ファサード 複雑な機能セットへの単純なゲートウェイのようなものです。あなたはあなたのクライアントが心配することを減らすためにブラックボックスを作りますすなわち インターフェイスをより簡単にします.
プロキシー Proxied-Forクラスと同じインターフェイスを提供し、通常、それ自体でいくつかのハウスキーピングを行います。 (したがって、重いオブジェクトの複数のコピーを作成する代わりに X
軽量のプロキシのコピーを作成します P
順番に管理します X
必要に応じて通話を翻訳します。)あなたは、クライアントの問題を解決してから解決しています 重いオブジェクトおよび/または複雑なオブジェクトを管理します.
デコレーター オブジェクトにさらに火薬を追加するために使用されます(オブジェクトという用語に注意してください - 通常、実行時にオブジェクトを動的に飾ります)。オブジェクトの既存のインターフェイスを非表示/損なうことはありませんが 実行時に拡張するだけです.
デコレータが関与したので、おそらくオブジェクトという単語に重点が置かれる理由を知りたいと思うでしょう - 一部の言語(Javaのような)は、仮想継承(つまり、C ++のように複数の継承)を許可しないようにしてください。時間をまとめます。
複数の継承(および恐ろしいダイヤモンド)でドラッグしたので、あなたは ミキシン - どちらですか インターフェイスの順序付けられた線形チェーン 多発性継承の問題を回避するため。ただし、ミックスインはそれほどうまく混ざりません。そして、私たちは終わります 特性 - はい、それら 動作のステートレスの小さな塊 C ++のテンプレートパラメーターに常にポップアップが表示されること。特性は、複数の継承や秩序チェーンのいずれにも進まない一方で、エレガントな方法で行動の構成と分解の問題に対処しようとします。
他のヒント
ファサード
たとえば、ファサードを使用して、APIへの呼び出しを簡単に行うことができます。を見てみましょう これ リモートファサードの例。ここでのアイデアは、サーバー上のコードの完全な実装がクライアントから離れて隠されているということです。クライアントは、サーバーで1つ以上のAPI呼び出しを行うことができる1つのAPIメソッドを呼び出します。
アダプタ
これの良い例が見つかります ここ, 、ウィキペディアで。クライアントオブジェクト Source
別のオブジェクトのメソッドを呼び出したい Target
, 、しかし、他のオブジェクトのインターフェイスは、クライアントが期待しているものとは異なります。
アダプターオブジェクトを入力します。
それはから電話をかけることができます Source
オブジェクトと、舞台裏で、電話してください Target
使用する必要がある方法。
Source->CallMethodAOnTarget() ---< Adaptor.CallMethodAOnTarget() this calls ---> Target.MethodWithDifferentSignatureAndName(int i)
プロキシに関しては、このデザインパターンの経験はありません。