序文
以前の章では、コンテンツ作成のデザインパターンのいくつかを紹介している、と私は言いたい今日は、最終的な設計モデルを作成することです - プロトタイプモデルのプロトタイプモデルは、より特別なモードを作成したタイプのモデルであり、最大値があります複雑であり、いくつかの新しいオブジェクトを作成し、私たちの日常のソフトウェアシステムの開発においては、既存のオブジェクトを複製することを特徴としている、と我々はまだ作成される新しいを使用するので、もし私たちは、同じの複数のインスタンスを使用する必要があります。これは、システムの複雑さを増すとタグ間の結合度が増加します。しかし、我々は、前述の工場設定モードを使用し、その後、製品の種類の増加に伴って、サブクラスも増加します。コードを維持することの難しさも増大し、その工場モデルの使用に適して存在していないことになります。例としては、同じタイプ、同じであるからです。しかし、パラメータとステータスが異なるインスタンスかもしれません。そこオブジェクトがあり、その後、私たちは今日の話をしたいのプロトタイプモデルを兼ね備えています。同じオブジェクトのプロトタイプオブジェクトによって、他の多数のクローンコピー。
プロトタイプモデルが導入します
まず、その理由
ソフトウェアシステムの設計プロセスの顔には、それが「複雑なオブジェクトを」直面したが、オブジェクトは、需要と変化の変化に起因する可能性が作成されます。だから我々は、インタフェースの安定性を維持する必要があります。次に、どのようにこの変化に対応を確保するには?
作成したスキーマは、一般的に新しいオブジェクトを作成するために使用して、我々はいくつかのオブジェクトの操作を完了するためにオブジェクトを使用している、我々はすぐに特別な新しい()操作が素早くオブジェクトを完了することができます提供する必要なしに、オブジェクトのプロトタイプモードを作成することができます作成し、これはすぐに新しいオブジェクトを作成するために非常に効果的な方法です。
第二に、意図
タイプの例としては、オブジェクトを作成し、プロトタイプをコピーして新しいオブジェクトを作成するために、プロトタイプを使用して、指定されました。
第三に、図の場合。
第四に、プロトタイプモデルのコードサンプル
プロトタイプのモードが少ないのコンポーネントが含まれます:
抽象プロトタイプカテゴリー:インターフェースとプロトタイプクラスのクローンを作成するには、自分自身のメソッドを実装する必要性を宣言します
最良のプロトタイプクラス:自体クローン他のインターフェースおよびメソッドを実装
私たちは、私はボーッで窓を見て、クラスを再生するために外出時々考える子供として覚えて、そのような例を見てください。私たちは出て取得することはできません。私は彼がうまく余裕と考えていました。あなたは、教室での学習に滞在学習は1回の宿題より詳しく知ることができ、外に出て遊ぶことができ、プレイには、複数のゲームをプレイすることができます。だから、何も大丈夫よりも、無駄になりません。もちろん、ただこれは一時的に不可能です達成するために、それについて考えます。決して真の現実であるが。今日、ちょうど最後にプロトタイプモデルは、それを使用することである方法を説明するために、この例を借りて、プロトタイプモデルを言います:
名前空間Prototype_Pattern { クラスPrototypeパターン { } #region抽象クラスプロトタイプ=========== パブリック 抽象 クラスプロトタイプ { /// <まとめ> /// それらの現在の状態 /// </要約> パブリック 抽象 無効(ステータス); /// <要約> /// 現在、彼らのためにやって /// </要約> 公共の 抽象 無効アクション(文字列のもの); /// <要約> /// 自分自身をコピーする方法を /// </要約> /// <戻り値> </戻り値> パブリック 抽象プロトタイプクローン(); } #endregion #region 特定のプロトタイプクラス-読書や学習============= 公衆 クラスLearnPrototype:プロトタイプ { 公共の オーバーライドは 無効状態() { Console.WriteLineを(「現在の状態:学びを」); } 公共の オーバーライドは 無効アクション(文字列物事) { Console.WriteLineを(物事を); } 公共の オーバーライドプロトタイプ()クローン { リターン(LearnPrototype)この; .MemberwiseClone() } } #endregion #region =============遊びに行く-特定のプロトタイプクラス のパブリック クラスのプロトタイプ:PlayPrototypeを { 公共 オーバーライド ボイド状態() { Console.WriteLineを(" 現在の状態:ハード遊ぶ" ); } 公共の オーバーライドは 無効アクション(文字列物事) { Console.WriteLineを(物事を); } 公共 オーバーライドプロトタイプクローン() { リターン(PlayPrototype)この.MemberwiseClone()。 } } #endregion }
クラスプログラム { 静的な 無効メイン(文字列[] argsを) { // 学習 プロトタイプlearnPrototype = 新新LearnPrototype(); learnPrototype.Status(); learnPrototype.Action(" 学習におけるワン:言語" ); プロトタイプlearnPrototype1 = learnPrototype.Clone (); learnPrototype.Status(); learnPrototype.Action(" 研究におけるII:数学" ); // 再生する プロトタイプplayPrototypeは= 新しい新しいですPlayPrototype(); playPrototype.Status(); playPrototype.Action(" 劇中のワン:ゲーム王" ); プロトタイプplayPrototype1 = playPrototype.Clone(); learnPrototype.Status(); learnPrototype.Action(「遊んでいるII:四輪駆動車" ); } }
使用シナリオと長所と短所
まず、シナリオの使用
リソースは、リソースの消費量を削減するために、新しいクラスの初期化の数を減らすために最適化されている1、
図2に示すように、変形例に複数のオブジェクトは、呼び出し側によって使用される複数のオブジェクトを提供することを目的とします。
第二に、利点
1、プロトタイプモデルは、クローンシャローコピーを提供し、クライアントにオブジェクトを作成するための複雑さを隠し
図2に示すように、プロトタイプクラスが動的増減製品ラインを可能にします
図3に示すように、製品が最初の製品のクラス階層を決定する必要はなく、プロトタイプモデルは、任意の階層構造にも適用可能です
第三に、欠点
図1は、クローニング法を用いて各クラスが必要
2、クローニング方法は、機能クラスを考慮に入れる必要がで、この新しいクラスのために難しいことではありませんが、それはクラス参照が間接オブジェクトの直列化、または参照をサポートしていない場合は特に、常に既存のクラスのために簡単ではありません環状構造を含む場合。
概要
ここでは、一時的な完成を導入している5つのデザインパターンの種類を作成します。私たちは、デザインパターンを学習し、より多くの裁量ときについてもっと考える必要があります。最高の追加デザインパターンの再建に検討しました。最大の有用性のためのデザインパターンことを確認してください。ここで終了したスキーマを作成します。Singletonパターンは、オブジェクトのインスタンスの数懸念されます。Controlオブジェクト一つだけ、グローバルアクセスのコール。Abstract Factoryパターンとファクトリパターンは、「単一のオブジェクト」と「オブジェクトの一連の」問題を解決します。Builderパターンは、「ターゲット部分」の問題を解決するための関心事です。特殊な工場モードで原型的なパターンの今日話すカウントすることができます。プロトタイプモデルは、一般的にめったに単独で使用されていない、それがプラントモデルと一緒に使用されています。次回私たちを与えるには、構造設計パターンを解決することです
心を治療するために通常使用の普通の生活は、あなたの人生はよりエキサイティングになります。
次のFanger魏コードをスキャンすることを歓迎し、私はデザインパターンが通過する道に足を踏み入れました!