どのデザインパターンをいつ使うべきですか?[閉まっている]


104

私はデザインパターンがとても好きですが、いつ適用できるかわかりません。私はデザインパターンが説明されている多くのウェブサイトを読みました。私はそれらのほとんどを理解していますが、自分の状況でパターンを認識するのは難しいと思います。

だから、私がこの質問をするのはそのためです。どのデザインパターンを使用するかについてのガイドラインや警報ベルはありますか?

たとえば、作成する必要があるオブジェクトを決定するためにswitchステートメントを実行している場合は、おそらくファクトリーデザインパターンを使用する必要があります。したがって、この場合のswitchステートメントは、Factoryパターンを使用するための「警報ベル」です。

では、デザインパターンを決定するためのより多くの「警報ベル」を知っていますか?


6
通常、私が見るパターンの説明には、そのデザインパターンにしたい状況の説明が含まれています。
R.マルティーニョフェルナンデス

回答:


99

通常、プロセスはその逆です。デザインパターンを使用する状況を探すのではなく、最適化できるコードを探します。正しく構成されていないと思われるコードがある場合。問題を解決するデザインパターンを見つけてください。

設計パターンは、構造上の問題を解決するのに役立つことを目的としています。設計パターンを使用できるようにするためだけにアプリケーションを設計しないでください。


23
構造的な問題だけでなく、行動や創造の問題も同様です。
DevDemon 2011

1
設計パターンは、テスト済みで実績のある開発パラダイムを提供することにより、開発プロセスをスピードアップできます。効果的なソフトウェア設計では、実装の後半まで見えなくなる可能性のある問題を考慮する必要があります。設計パターンを再利用すると、大きな問題を引き起こす可能性のある微妙な問題を防ぎ、パターンに精通しているコーダーやアーキテクトがコードを読みやすくすることができます。
SaddamBinSyed

5

それらを学び、ゆっくりと理解し、いつ使用するかを理解できるようになります。シングルトンパターンのような単純なものから始めます。

オブジェクトのインスタンスを1つだけ作成する場合。シングルトンパターンを使用します。オプションオブジェクトを使用してプログラムを作成しているとします。あなたはそれらのいくつかを望んでいない、それはばかげているでしょう。シングルトンは、複数が存在しないことを確認します。シングルトンパターンはシンプルで、頻繁に使用され、非常に効果的です。


17
シングルトンは、インスタンスが1つだけ必要な場合には適していません。シングルトンは、1つのインスタンスに制限する必要がある場合に使用します。あなたはときに一つだけ必要なインスタンスを、あなたは、単に一つだけのインスタンスを作成し、それを使用して試すことができます。
R.マルティーニョフェルナンデス

また、シングルトンは非常に便利で必要な場所もありますが、必要でない場合は非常に簡単に実装できます。ここで示唆しているように、そしてフェルナンデスが指摘したように、おそらくそれは必要ないでしょう。実際のところ、シングルトンパターンの使用は、可能性のある(おそらく)コードの臭いの良い兆候です。サービスクラスに使用すると、コードのにおいがします。シングルトンではなくDIが必要なようです。一部の人々はそのようにそれらを使用します。特に小さな(重要でない)コード、またはPOCの場合。しかし、私が言ったように、いくつかの効果的な用途があります。何かをする簡単な方法を見つけてはいけません。
Suamere 2014

4

@Peter Rasmussenに完全に同意します。

設計パターンは、一般的に発生する設計問題の一般的な解決策を提供します。

以下のアプローチをお願いします。

  1. 各パターンの意図を理解する
  2. 各パターンのチェックリストまたはユースケースを理解する
  3. 問題の解決策を考え、解決策が特定のパターンのチェックリストに該当するかどうかを確認します
  4. そうでない場合は、デザインパターンを無視して、独自のソリューションを作成してください。

役立つリンク:

ソース作成:C ++やJavaを含む複数の言語で意図構造チェックリストを美しく説明します

ウィキペディア:C#やJavaを含む複数の言語での構造、UML図、実用例を説明しています。

ソースのチェックリスト経験則の設計パターンは、探しているアラマンベルを提供します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.