Latest web development tutorials

ファクトリモード

Factoryパターン(Factoryパターン)は、Javaは、最も一般的に使用されるデザインパターンの一つです。 デザインパターンのこのタイプのオブジェクトを作成するための最良の方法を提供する、スキーマを作成属します。

ファクトリモードでは、我々はあなたがオブジェクトを作成するときに論理を作成するために、クライアントが公開されることはありませんし、共通のインタフェースを使用して新しく作成されたオブジェクトを指すように。

入門

意図:作成されたオブジェクトのインタフェースの定義、サブクラスに遅延を作成するプロセスを作るために工場出荷時のパターン、サブクラスは工場をインスタンス化するクラスを決定させます。

主に解決するために:インターフェースオプションの主な問題を。

使用するときは:私たちは、明示的に異なる条件計画の下で別のインスタンスを作成するとき。

修正方法:サブクラスは、ファクトリインタフェースを実装するためにしましょう、それが返された抽象的製品です。

キーコード:サブクラスで実行される作成プロセス。

応用例:1、あなたが車を必要とする、あなたはパイプに車を持たずに、直接、工場内から拾うことができますそれを行う方法であるだけでなく、車の中の実装。2、Hibernateの交換データベース変えるだけの方言と駆動することができます。

利点:1、呼び出し側はそれにその名前を知って、オブジェクトを作成したいと考えていました。2、高いスケーラビリティ、あなたは限りファクトリクラスの拡張ができるように、製品を追加する場合。 3、製品実現、製品のインタフェースのみに関心発信者を遮蔽します。

短所:各製品を増やし、我々は具体的な工場を達成するためのクラスとオブジェクトを追加する必要があり、そのように指数関数的にシステムが増加する中クラスの数は、ある程度、システムの複雑さを増加させただけでなく、システムの特定のクラスを増加させ依存性。これは良いことではありません。

使用シナリオ:1、ロガー:レコードは、ローカルのハードディスク、ユーザーがどこかにログインするために選択することができ、システムイベント、リモートサーバに記録することができます。ユーザーがデータベースを使用し、データベースが変更される可能性があり、最終的なシステムの種類を知らない2、データベースアクセス、。 図3は、サーバへの接続のためのフレームワークを設計、次の3つの協定、「POP3」、「IMAP」、「HTTP」、製品カテゴリなどができ、これらの3、共通のインタフェースを実現するために必要です。

注:クラスのようにモードを作成し、それは複雑なオブジェクトを生成するのに必要とされるところはどこでも、あなたがFactory Methodパターンを使用することができます。もう一つ注意すべきは、工場出荷時のパターンを使用して、複雑なオブジェクト、および単純なオブジェクトのための場所は、特に、唯一の工場モデルを使用せずに作成された新しいオブジェクトによって完成される必要があるということです。 工場出荷時のパターンを使用する場合は、ファクトリクラスを導入する必要があり、それはシステムの複雑さを増加させます。

実現

私たちは、エンティティ・クラス・インタフェースと実装シェイプShapeインタフェースを作成します。 次のステップは、ファクトリクラスを定義することですShapeFactory。

FactoryPatternDemo、ShapeFactoryShapeオブジェクトを使用するクラスを取得するために私たちのデモ。 それは、オブジェクトの型を取得する必要がある、ShapeFactoryに情報(CIRCLE / RECTANGLE / SQUARE)を送信します。

FactoryパターンUMLダイアグラム

ステップ1

インターフェイスを作成します。

Shape.java

パブリック・インタフェースShape {
   ボイドドロー();
}

ステップ2

インターフェイスを実装するエンティティクラスを作成します。

Rectangle.java

パブリッククラス長方形は{Shapeを実装します

   @Override
   公共ボイドドロー(){
      System.out.println( "内部長方形::ドロー()メソッド。");
   }
}

Square.java

パブリッククラススクエア{Shapeを実装します

   @Override
   公共ボイドドロー(){
      System.out.println( "インサイド広場::ドロー()メソッド。");
   }
}

Circle.java

パブリッククラスサークル{Shapeを実装します

   @Override
   公共ボイドドロー(){
      System.out.println( "内部サークル::ドロー()メソッド。");
   }
}

ステップ3

与えられた情報に基づいてオブジェクトのエンティティクラスを生成するファクトリを作成します。

ShapeFactory.java

パブリッククラスShapeFactory {
	
   //使用getShapeメソッド型形状パブリック形状getShape(文字列形状タイプ)のオブジェクトを取得するには{
      場合(形状タイプ== nullの){
         ヌルを返します。
      }		
      場合(shapeType.equalsIgnoreCase( "CIRCLE")){
         新しいサークルを返します();
      }エルス場合(shapeType.equalsIgnoreCase(「RECTANGLE ")){
         新しいRectangleを返します();
      }エルス場合(shapeType.equalsIgnoreCase( "SQUARE")){
         新しい広場を返します();
      }
      ヌルを返します。
   }
}

ステップ4

型情報を渡すことによって、クラスのエンティティオブジェクトを取得するために工場を使用してください。

FactoryPatternDemo.java

パブリッククラスFactoryPatternDemo {

   公共の静的な無効メイン(文字列[] args){
      ShapeFactory shapeFactory =新しいShapeFactory();

      //サークルオブジェクトを取得し、そのdrawメソッドシェイプshape1 = shapeFactory.getShape( "CIRCLE")を呼び出します。

      //)(shape1.drawサークルのdrawメソッドを呼び出します。

      // Rectangleオブジェクトを取得し、そのドロー法シェイプshape2 = shapeFactory.getShape(「RECTANGLE ")を呼び出します。

      // shape2.draw長方形()のdrawメソッドを呼び出します。

      //スクエアオブジェクトを取得し、そのdrawメソッドシェイプshape3 = shapeFactory.getShape( "SQUARE")を呼び出します。

      //)(drawメソッドスクエアshape3.drawを呼び出します。
   }
}

ステップ5

出力を確認します。

サークル::ドロー()メソッド内。
長方形の内側::ドロー()メソッド。
スクエア::ドロー()メソッド内。