入門
意図:サブクラスへの遅延を作成するプロセスとなるよう作成されたオブジェクトのインタフェースを定義し、サブクラスはクラスファクトリのどのインスタンスを決定させ、工場モデル。
主に解決するために:インターフェースオプションの主な問題を。
ときに使用する:あなたは、私たちは間違いなく計画異なる条件で異なるインスタンスを作成するとき。
解決方法:サブクラスは、ファクトリインタフェースを実装してみましょう、それが返品された製品の抽象的です。
キーコード:作成プロセスは、そのサブクラスで実行されます。
応用例: 1、あなたが車を必要とする、あなたは工場内から直接拾うことができ、車はそれを行う方法で、チューブを持つことなく、車の中、この特定の実装。2は、Hibernateの変更は、単にデータベースの方言を変更すると駆動が可能。
利点: 1、呼び出し側はそれにその名前を知って、オブジェクトを作成したかったのです。2、高いスケーラビリティ、あなたがいる限りファクトリクラスの拡張ができるように、製品を追加したい場合。図3に示すように、遮蔽製品の具体的な実現は、発呼者は唯一の製品のインターフェースに関する。
短所:たび製品増加、コンクリート工場クラスおよび目的を達成する必要性を増加させる、そのようなシステム増加のクラスの数が指数関数的にその、ある程度、システムの複雑さを増加させるだけでなく、システムの特定のクラスを増加させます依存性。これは良いことではありません。
使用シナリオ: 1、ロガー:レコードは、ローカルのハードディスクに、ユーザがどこかにログインするために選択することができ、リモートサーバーなどのシステムイベントを、記録することができます。ユーザーがデータベースを使用し、データベースが変更を持っていることがあり、最終的なシステムのどのような種類がわからない2、データベースアクセス、。3、サーバーに接続するためのフレームワークを設計し、あなたは、「POP3」、「IMAP」3プロトコルを必要とし 、「HTTP」をこれらの3つの製品には、クラスとして、共通のインタフェースを実装することができます。
注意:このクラスは、複雑なオブジェクトを生成する必要がある任意の場所にパターンを作成するために、あなたはFactory Methodパターンを使用することができます。注意すべき地域の一つは、工場出荷時のモード、および単純なオブジェクトに適した複雑なオブジェクトは、特に、工場モデルを使用せずに、新しいによって作成されたオブジェクトを完了するためにのみ必要があるということです。工場出荷時のモードは、それがファクトリクラスを導入する必要がある場合、それはシステムの複雑さを増加します。
シンプルなファクトリの実装
コード表示
パッケージcom.example.factory; //は、インタフェースオブジェクト作成 パブリック インターフェース算術{ ボイド試験(INT A、INTのBを); }
パッケージcom.example.factory; // 実装クラス減算 パブリック クラスのサブテスト実装算術{ @Override 公共 ボイドテスト(int型 A、int型B){ するSystem.out.println( "加算結果:" +(A- B))。 } }
パッケージcom.example.factory; // 実装クラス加算 パブリック クラス SumTest 実装算術{ @Override 公共 ボイドテスト(int型 A、int型B){ するSystem.out.println( "加算結果:" +(A + B)); } }
パッケージcom.example.factory。 // 工厂 パブリック クラスProductFactory { 公共の 静的算術getObj(文字列の当量){ 場合( "合計" .equals(EQ)){ 返す 新しい)(SumTestを。 } そう であれば( "サブ" .equals(EQ)){ 戻り 新しい)(サブテストを。 } 他{ 新しい例外( "错误" )。 リターン ヌル。 } } }
パッケージcom.example.factory。
类//测试 パブリック クラスのテスト{ 公共 静的 ボイドメイン(文字列[]引数){ 算術和 = ProductFactory.getObj(「総和」)。 演算サブ = ProductFactory.getObj(「サブ」)。 sum.test( 1,2 )。 sub.test( 1,2 )。 } }
加算結果:3
加算結果: -1