出典:https://www.cnblogs.com/wyy1234/
カタログを読みます
1.はじめに工場パターン
前の私たちは、工場の欠点を知っていることは簡単です:私たちは新製品を追加したときに開閉の原則に反するので、ファクトリクラスを変更する必要があります。工場出荷時のパターンは、この欠陥が発生解決することであり、溶液である植物のサブクラスでタスクの具体例を作成するために、植物は、インタフェースのインスタンスを作成して提供するだけでなく、複数のマウスの生産にあります例:
マウスカテゴリ:
//マウス抽象クラス のパブリック抽象クラスマウス { パブリック抽象空印刷(); } //デルマウス パブリッククラスDellMouse:マウス { ます。public voidオーバーライドを印刷() { Console.WriteLineを(以下"マウスは、Dellを作成!"); } } // HPマウス パブリッククラスHpMouse:マウス { ます。public voidオーバーライド印刷は、() { Console.WriteLineを(以下"HPは、マウスを作り出しました!"); } }
ファクトリクラスは抽象メソッドはマウスだけ(またはインタフェース)を生成提供し、そのサブクラスは、Dellのマウス工場プラントなどの特定の製品を生産するマウス、マウスだけデルの生産を継承し、次のようにヒューレット・パッカードHPマウス植物は、マウスだけを生成します。
/// <まとめ> ///マウス抽象クラス・ファクトリ /// </要約> パブリック抽象クラスMouseFactory { パブリック抽象マウスCreateMouse(); } //デルマウス工場 パブリッククラスDellMouseFactroy:MouseFactory { 公共CreateMouseオーバーライドマウス() { )(新しい新しいDellMouseを返す; //植物製品の特定の例では } } // HPマウス工場 パブリッククラスHpMouseFactoryを:MouseFactory { 公共CreateMouseオーバーライドマウス() { )(新しい新しいHpMouseを返す; //特定の植物に製品の例 } }
クライアントコード:
メインボイド静的(文字列[]引数) { //デルマウス製造 MouseFactory dellMouseFactory新しい新しいDellMouseFactroy =() ;マウスdellMouse dellMouseFactory.CreateMouse =() )dellMouse.Printは(; // HPマウスを産生 MouseFactory hpMouseFactory =新しいHpMouseFactory (); マウスhpMouse hpMouseFactory.CreateMouse =(); hpMouse.Print(); Console.ReadKey(); }
次のようにプログラムを実行し、結果は以下のとおりです。
我々が見ることができる上記の例ではクライアントが特定の製品を製造するために、具体的な実施例のために工場に対応する最初の製品は、その後、コンクリート工場製品でインスタンス化。私たちはASUSマウスを作製する場合は、マウスASUSファクトリクラス(AsusMouseFactory)とAsusのMouseクラス(AsusMouse)を追加し、その後、クライアントは、次のコードでASUSのマウスを生成します:
MouseFactory asusMouseFactroy =新しいAsusMouseFactroy(); asusMouseFactory.CreateMouse();
工場出荷時のモード動作のみを追加すると、開閉の原則に沿ったもので、以前のコードを変更することはない新製品を追加します。
2.概要
図上部クラスコード:
Factoryパターンの利点:
ファクトリモードは、効果的にファクトリクラスのコードを変更する必要が設計原理の開閉の原則に沿って、新製品を追加した問題を解決します。
ファクトリモードの短所:
自然プラントモデル具象サブクラスに仕事の具体的な例を作成することで、新たな問題につながる工場であった:クライアントのインスタンスを選択するタスクの種類、などのDellなど、我々はマウスを作製したい、あなた必要があります新しいクライアントDellのマウス工場インチ 我々は100マウスDellの工場を新しい場合、何をどのようにHPマウスに現職である想像してみて?新しいDellMouseFactoryは、新しいHpMouseFactoryに置き換えることができます。だから、簡単な工場と工場のパターンが完璧ではない、我々は特定の状況に応じて選択する必要があります。