今日はGOF(PDF版)の23クロックデザインパターンの本を見ました。
この本は、より合理化された「デザインパターンデザインパターン分析の23種類-GoFの説明しました」。
この記事では、ノートのと同じです。
1.Factoryモード
以上の1.1サブクラス化統合
この機能は、工場出荷時のモデルが一緒に統合することができ、複数のサブクラスを作成することです。ユーザーが作成した達成するために心配する必要がないように。あなたが達成するためにパラメーター・マーカーを実装または使用する異なるサブクラスの使用であり、最後にそれらを知っている必要はありません。
もう一つの特徴は、工場出荷時のモデルは、異なるオブジェクト名、隠された実装と同じ機能を作成するためのさまざまな方法で使用することができます。
実際にはこの方法は、コードの統合パッケージのようなものです。図2bの比較引数は、このルックスより良いということです。もちろん、彼は本当に素敵でした。その後の使用やメンテナンスの過程で、工場出荷時のモードはN倍の作業量を削減し、より少ないエラーが発生しやすくなります。
たとえば、1.1.1
N個のサブタイプは、工場の使用とどのようなサブクラスのニーズが直接このサブクラスを作成し、会っなし、があります。ロジックに応じて、それが明確でシンプルに見えます。
更新する必要があり、種子はN N / 2種になるようなしかし、一度(我々は2つのカテゴリが実際に一緒に統合することができました)。あなたが場所にMのこのタイプを作成した場合、あなたはより大きなリスクにつながる可能性がある、フルテキストの代替的なアプローチを言及しないように(M回を変更する必要があり、この時間は。あなたは、彼がうまく働いていたと思ったが、彼はあまりにもありあるいはそれ以上の、あるいはドレイン)。工場モードの使用は、あなただけの工場を変更する必要があります。あなたが変更に場所を正確に知ることができます。でも、同じように多く、工場出荷時のモデルはまた、彼の長所を持っているされているコード番号を変更!
遅延の作成1.2
工場出荷時のモードも遅延アクションを作成することができ、工場を作成するときに、我々は、特定のパラメータのパラメータを決定します。必要なときに作成しました。これは、この前に特定の初期化アクションを非表示にすることができます。あなたが操作を初期化しているものを作成する前に、あなたが知っている必要はありません。
たとえば、1.2.1
あなたはそれが作成されたときに、召喚クリーチャーを召喚したい場合は、あなただけではない豚や鷲の呼び出しで、彼の生涯を気にしたいです。我々は、ダウンロードを直接作成し、必要なときに必要なパラメータを渡すの節約に工場を開始する必要があります。
もちろん、あなたがすべてのこの召喚に関連するパラメータを保存し、必要なときに作成されて置くことができます。我々はこのようにして、オブジェクトへのこれらのパラメータのパッケージを最適化した場合。実際には、これは元の工場出荷時の比較です。いくつかはちょうどそれ以前のものの前に決定初期に工場を置いてもよいです。これは、(例えば、それぞれのサブクラス型スイッチによって各時刻)、そのアクション毎の繰り返しを避けます。
2 AbstactFactoryモード
複数のアプリケーションのようなAbstactFactoryファクトリーモードFactoryObject。しかし、通常はクラスを作成するためのファクトリでは、とAbstactFactoryは多くの種類を作成しました。新モデルは、工場出荷時のアップグレードの一種と考え、やや冗長であるようにAbstactFactoryはなります
3.Singletonモード
シングルトンクラスの核となるアイデアは、1つのオブジェクトのみです。すべての問題に加えて、問題ではありません。
例えば、私は、変数やクラスの静的メソッドがすべての需要を満たすために使用されるようになっている任せることはできない、グローバル変数を使用することはできません静的メンバ変数のクラス型を使用することができます。
ことができます!
実際には、シングルトンは、達成する方法の静的メンバ変数を使用することです。
限り、あなたは、あなたがよりよい利用を達成し、Singletonパターンの概念を実装するように感じるよう。これは、シングルモードの実施形態を実現することです。
通常の状況下で、私たちは工場とシングルトンを組み合わせます。
実際には、長い間それを満たすようとして:このクラスは、1つのオブジェクトのみです。これは、単一の実施の形態を使用して実装する必要があります。
3.1利点
シングルトンは、問題のクラスは根本的に可能な限り多くの回インスタンス化されて解決しなければならない(損傷の単一例の原理によって、あなたはシングルトンインスタンスを複数回聞かせすることができますが、この操作を誤って生成することができません)。
例それぞれ他の単一呼び出しは、あなたが必要との懸念が列を初期化していないとき(もちろん、単一の実施形態と呼ばれる発行サイクルが初期化を解決できるのは、初期化は、単一の初期化は間接的に、単一の例のAを必要とするA単一例B、例Bシングルトンが必要です) 。
より自然を達成するためにシングルトン(より自然でより容易に理解達成し、より少ないエラーが発生しやすいです)。
4.Builderモード
Builderパターンは非常に弱いモード(ほんの少しのスキル)と見なさ。
Builderパターンは漫画時間時計を思い出させます。具体的には、明確ではないが、記憶に残るシーンがあります。
「コンポーネント脚と足、胴体と腕の組成は、私の頭を補うために...」
これは、おおよその意味ビルダーモードです。オブジェクトの初期化は、いくつかの部分に分け。それは彼の一部の初期化を達成するために、異なる時間、異なる場所、異なる人々とさえにあってもよいです。すべての部品が初期化されているときは、このオブジェクトに立ち上がることができます。
5.Prototypeモード
クラスは、自分自身をコピーする方法を提供します。そこで彼は、基本クラスのオブジェクトを知っている必要はありません基本クラスオブジェクトのクローンが実際にそのサブクラスのオブジェクトであるときときそれ。
6.ブリッジモード
複数のタイプの組み合わせでブリッジモード一緒。私たちは、プラットフォーム、実現のM種類のN種類をサポートします。直接利用サブクラス場合はM * Nのサブクラスを生成します。もちろん、ブリッジパターンを使用して実際の開発過程で自然です。クラスの実現の増加は認められなかった場合には、N個のサブクラスは、あなたが自然に多層の変更を統合するために、新しいクラスを使用して考える向上させる必要があります。
7.Adapterモード
インターフェースパッケージその統一されたインタフェースへのパッケージのインターフェイスのさまざまな実装。あなたは、低レベルの呼び出しを非表示にすることができます。クロスプラットフォーム(スレッド機構の異なるプラットフォームが同じではない)と、サードパーティのライブラリを使用コール(サードパーティスタイルと既存の矛盾のスタイルを呼び出します)。
8.Decoratorモード
デコレータを追加することができますDecoratorパターン、強化するための方法。例えば、我々はテキストオフを暗号化し、我々は暗号化するために空腹デコレータ(暗号化)の様々なを使用することができます。もちろん、ときと逆の順序を復号化する必要があります。
9.Compositeモード
複合モード。隠された構造的特徴。あなたは、ノードがリーフ・ノードまたは非リーフノードであることを知っている必要はありません。たとえば、グループに部門や賃金、あるいは賃金を賃金に人を送信します。人々の賃金は人や部署やチームのお金を取るために気にしないために、彼はちょうどあなたが送信したいどのくらいのお金を知りたいです。インテリアに関しては本当に彼が上に行く作ったもの。
10.Flyweightモード
モードを共有し、共通のデータの一部が共有オブジェクトとして複数の場所で使用されます。例えば、部屋の中、我々は、異なる場所に彼を置く廊下(木がまったく同じ、非常に奇妙である内)、家の外のクリスマスツリーの多くの部分があります。異なる装飾品と異なる場所で。この時間は、木そのものの説明は同じですが、彼の位置は矛盾や装飾品です。
言わなければ、通常の状況下で、我々はまた、これらの共有オブジェクトを管理するためのオブジェクトを必要としている(またはあなたが新規または既存の使用に出てくるかわかりません)。オブジェクトこれは一般に、単一の実施形態です。同時に、マネージャーも、工場かもしれません。
11.Facadeモード
外観モード。APIをパッケージ化操作のセットにサブシステム。(主は、ああ行う前方に特別に設計されたモデルを置く知っている、家庭内機器を強制的にロードされました)
12.Proxyモード
HTTPPROXYそれが不慣れではありません。リバースプロキシは、実装を隠すことである一方、実際にはエージェントは、発信者を非表示にすることです。より多くのデザインモードプロキシモードは、隠された実装です。この場所は、リバースプロキシモードと呼ばれているので、良いです。
13.Templateモード
テンプレートモード、隠されたロジック基礎となる実装。このモデルは、最も頻繁に使用する必要があります。std ::ベクトル、のstd ::リスト、のstd ::マップ、のstd ::セット。使用されていない場合でも、確かにそれを聞きました。
14.Strategyモード
戦略モード。カプセル化されたオブジェクトの機能的多様性。走行中のアセンブリのために。
15.Stateモード
ステートモード。知らないステートマシンは、異なる状態の実現を使用しないでください。
16.Observerモード
OBモードでは、特定のイベントを監視し、適切な処置を行います。リスナーは、動的な生活の追加を可能にするために削除する必要があります。
17.Mementoモード
メモモード。このモードは、オブジェクトダウンの現在の状態を保存することができ、そしてオブジェクトによって格納され、その状態に戻すことができます。(これは許可され、もちろん、私たちはいつでも最後の操作に戻りたいのためのデザインパターンで、この機能を実現するために、極端な場合には、お使いのメモリリソースの消費量は、* 2が必要)。
18.Mediatorモード
仲介モデルが呼び出され、両方隠さを実装します。通信のためのモジュールは、非常に良い結果を持っています。
19.Commandモード
コマンドモード、パラメータとパラメータ明が隠さ。
20.Visitorモード
ビジターパターン、カプセル化されたデータオブジェクトの動作を制御します。ですから、動作モードを更新し、元のデータから独立していることができたときにということ。
責任パターンの21.Chain
後続ノードの処理に渡す責任パターンの鎖、プロセスイベント、または(実際には、さらに処理され、転送されてもよいです)。
22.Iteratorモード
あなたは、使用のSTDに行くことができます::リスト、のstd ::マップ、のstd ::ベクトルは、はstd ::セットを。イテレータイテレータパターンは、機能を実現することです。
23.Interpreterモード
通訳パターン。スクリプトの解析。各インタプリタを実装し、それは新しいスクリプト言語を(非常に巨根されていない)を発明することです。
24あとがき
実際には、デザインパターンはいくつかのプログラミングのスキルです。我々はいくつかのデザインパターンを使用しなければならないというわけではありません。あなたが問題に悩まされたり、何らかのトラブルが予想される場合しかし、あなたは解決策は、一般的に、既存のデザインパターンになる傾向があると思うかもしれません。あなたはこれらのモードの核となるアイデアを使用して問題が発生した際に、これらのモードをマスターするために訓練することができますので。最後に、溶液、及びパターン又は実質的に均一な、またはいくつかのモードの組み合わせ、またはそれら自身の一部と、結果が良好であることが理解ドープを製造します。デザインモデルは、以前の経験の多くの要約である、彼はもはや多分あなたはインスピレーションを与えるために新しいモデルを作成します。現在の環境に適用できないが、彼の原理を理解します!