人間のデザインパターン。

最も簡単なレベルでパターンを説明するために、プログラミングから遠く離れた人に、最短時間でテストをパスする必要がありました。

説明の単純さと妥当性のバランスの結果、このチートシートが作成されました。

この非常に妥当性とシンプルさを評価してください。



Likbez:

カプセル化-オブジェクトの本質をインターフェースの背後に隠します(画像を保持するだけで、表示、サイズ変更、回転ができる必要があるだけです...)

クラスインスタンスはオブジェクトです:)



簡単な紹介:

パターンは3つの主要なグループに分けられます。

1.生成-オブジェクトの作成を担当するパターン。

2.構造-クラス/オブジェクトの表現の構造を決定します。

3.行動パターン-オブジェクトに対するアクションをカプセル化(非表示)するためのパターン。



1.生成する



抽象ファクトリ-同様のクラスのオブジェクトを作成します。

抽象クラスと相続人、相続人のための抽象ファクトリと具体的なファクトリが作成されています。 異なるクラスのオブジェクトを作成する方法論を分離するために必要です。 クラスは関連している必要があります。

C#の例

ロシア語で図面



Builder-オブジェクトの作成とそのプレゼンテーションを分離します。

同じ作成メソッドを呼び出すと、異なる結果が得られます。

C#の例

ロシア語で図面



シングルトン-クラスの1つのインスタンスの可用性を保証します。

システムがクラス(オブジェクト)の1つのインスタンスの存在を保証する必要がある場合に使用されます。 たとえば、システムには1つのブラックアカウンティングフォームしか存在できません。 これはグローバル変数の類似物ですが、はるかにクールです。

C#の例

ロシア語で図面



2.構造



アダプタ-:)あるクラスのインターフェイスを別のクラスに適合させます。

2つのクラスがあり、インターフェイスのみにアクセスできるとします(以下のコードを変更します)。 そして、相互作用を確立する必要があります。 次に、パターンが適用されます。 クラスAのインターフェースを取り、そのメソッドをクラスBに変換します。

例:複素数を扱うクラスがあり、ToCompl(int i)メソッドがあり、複素数については知っているが、そのメソッドはConvertToComplex(int i)と呼ばれる別のクラスがあると、ConvertToComplexメソッドを持つ最初のクラスのアダプターを作成しますそして、その中でToComplを呼び出します(例は愚かで、名前だけで動作しますが、実際にはそこですべてを置き換えることができます、例えば、1つのメソッドではなく15を呼び出します)

C#の例

ロシア語で図面



コンポジット-多数の同様のクラスに対して1つのシンプルなインターフェースを作成できます。

さまざまな幾何学的形状(線、円)があり、Drawメソッドを持つFigureクラスからそれらを継承し、すべての相続人に単純な描画呼び出しを提供するとします。

C#の例

ロシア語で図面



デコレータクラスに機能を動的に追加します。

たとえば、写真クラスがあり、フレームをハングアップして、写真を表示するクラスを作成する必要があり(Photoクラスのメソッド)、次にフレームを表示する(独自のメソッドによって)

C#の例

ロシア語で図面



プロキシ-クラスをそれ自身で置き換えます:)

システム全体では、プロキシは必要なクラスのように見えますが、そうではありません。

たとえば、大きなオブジェクト(PDFドキュメント)があり、画面に表示する必要があります。 すべてを読み込むことはできません(メモリに収まりません)。 したがって、ページごとにロードして出力するプロキシを作成しますが、実際のドキュメントのように見えます。

C#の例

ロシア語で図面



3.行動パターン



コマンド-アクションをオブジェクトにカプセル化します。

たとえば、メッセージを表示するメニューがあります。 メニューハンドラに出力を書き込むだけでなく、これを行うクラスを作成します。 このようなクラスのツリーにより、「元に戻す/蛍石」などを整理できます。実際、アクションを保存できます。

C#の例

ロシア語で図面



イテレータ-オブジェクトのコレクションをバイパスできます。 たとえば、ベクトル(配列)があり、[]の代わりにNext、Previosメソッドを記述します。 したがって、配列にアタッチされておらず、将来的に別の構造に置き換えることができます。

C#の例

ドイツ語で図面



Memento-オブジェクトの状態を保存できます。 たとえば、Photoshopでは、コマンドをキャンセルし、写真全体を破損する地獄のフィルターを適用しましたが、このフィルターの逆機能はありません(コマンドはパターンを介して機能しません)、フィルターを適用する前に、写真を愚かに保存してから復元できます。

C#の例

図面でウクライナに



オブザーバー-オブジェクトの相互作用を確立します。 たとえば、フォームがあり、ボタンを押すと「42」がテキストフィールドに表示されます。タイプボタンのボタンハンドラーに愚かに書いてフィールドを変更できますが、これは正しくありません。 Tru:Observerオブジェクト(通常はシングルトン)を作成し、ボタンでそのObserverのメソッドを呼び出すと、すでにこのメッセージがすべてのテキストフィールドに送信されています(もっとあるかもしれません:)

C#の例

ロシア語で図面



メディエーターはオブザーバーと同じですが、「多対多」の態度があります。

たとえば、ボタンだけでなくメニューもあります。

C#の例

図面でウクライナに



状態-クラスをその相続人に置き換えることができます。

たとえば、アプリケーションがあり、処理済みまたは未処理のいずれかです(3番目のアプリケーションはありません)。 これら2つの状態のクラスを作成し、ChangeStateメソッドを持つ抽象クラスStateApplicationsから継承します。 このメソッドの実装では、現在の状態を必要なオブジェクト(Processed、Unprocessed)に置き換えます。これらの状態は通常シングルトンです。

C#の例

図面でウクライナに



戦略-アルゴリズムをカプセル化できます。

たとえば、配列を並べ替える必要があり、どのメソッド(バブル、高速...)でもかまわないため、クラスを作成し、そこから相続人(特定のアルゴリズム、すでに存在する)のSortメソッドを作成しますが、特定の並べ替えのメソッドでそれらを実装します。 これにより、他のクラスはどのように、どのようにソートするかを知ることができません。

C#の例

ロシア語で図面



訪問者-既存のクラスで機能をハングさせることができます。

たとえば、従業員がいて、彼は白黒の給与を持っています。 それは異なって考慮されます。 nizyaを変更するワーカークラス。 私たちは2つの方法を持っている訪問者を作ります:実数と税金のカウント。 彼はWorkerオブジェクトを取得し、そこから入札を引き出して、別の方法で取得します。

C#の例

図面付きのイタリア語。



upd:テクニカルエディターはアントンです。




All Articles