形態、実際の条件、特に以下の三つのカテゴリに対応する異なる形態の各々を複数備える工場パターン:
シンプルなファクトリパターンシンプル工場
Factory Methodパターンのファクトリメソッド
Abstract Factoryパターン抽象工場
工場出荷時のパターンを使用する目的
:
非クライアントオブジェクトコードからクライアントコードへの転送の例-達成するために、ある
クライアントとサービス側のデカップリング
公共の静的な無効メインクライアントコードで見た場合は、ファクトリクラスのモデルでは、クラスAまたはクラスBを使用したい場合は、メインプロセスでは、その後、Aは新しいmain()メソッドまたは新規に表示されていないことを言いますB()のコードなどが、これらのクラスファクトリクラスの作成に見ることができます。
シンプルな
ファクトリパターン(簡単な工場)は 、静的ファクトリパターン(staticファクトリ)として知られているクラスの作成モード、に属します。
一般的に、実際の環境では、簡単なファクトリパターンを使用し、それぞれ4人の参加者(役割)、があります。
ファクトリクラスの役割:呼び出し元の直接製品の役割
抽象製品の役割:インターフェイスまたは特定の製品を担当するの役割を定義する抽象クラス、およびクライアントとの相互作用。
特定の製品の役割:工場によって作成されたオブジェクトだけでなく、クライアントの練習用ターゲット
クライアント:インスタンスを呼び出すには、ファクトリクラスを生成し、及び方法の対応する実施例を呼び出しています
以下の実施例を備えました:
package com.yp;
/**
* 定义 People 抽象类
* @author Administrator
*/
public abstract class People{
abstract void say();
}
package com.yp;
public class Chinese extends People {
void say() {
System.out.println("说汉语");
}
}
package com.yp;
public class American extends People {
void say() {
System.out.println("Speak in English");
}
}
package com.yp;
public class PeopleFactory {
public static People create(int type) {
People p = null;
if (1 == type) {
p = new Chinese();
} else if (2 == type) {
p = new American();
}
return p;
}
}
最後のテストクラス、また、クライアントコード:
package com.yp;
public class t {
public static void main(String[] args) {
People p = PeopleFactory.create(1);
People p2 = PeopleFactory.create(2);
p.say();
p2.say();
}
}
次のように実行結果は以下のとおりです。
分析:
このモードでは、クライアントの役割は、抽象ファクトリクラスの役割と製品の役割を見ることができ、及び製品実現の役割は見えません。
欠点のこのモード
:
クライアントの新しいクラスは、上記の例を取る場合は、増加が英国に加え、フランス語、人々を継承するために、実際のクラスに新たに追加は、ファクトリクラスは、現在のファクトリクラスので、調整する必要がありますフォアグラウンドと入ってくるクラスの実際の値との間のマッピングを担当し、一致。
ます。https://my.oschina.net/u/1182369/blog/406567で再現