ホームページ  >  記事  >  Java  >  Java のファクトリ パターンのグラフィカル コード分析

Java のファクトリ パターンのグラフィカル コード分析

黄舟
黄舟オリジナル
2017-08-07 10:47:511280ブラウズ

この記事はPower Node Java Academyがまとめたファクトリモード関連の情報を中心に紹介していますので、困っている方は参考にしてください

簡易ファクトリモード

追加クラスが必要な場合は、ファクトリクラスのCreateOperate()を呼び出してください。製造するProductを指定するには

例えば、DahuaデザインパターンP11にあるオペレーションファクトリの例:


public static Operation createOperate(string operate)
{
Operation oper = null;
12
switch (operate)
{
case "+":
{
oper = new OperationAdd();
break;
}
case "-":
{
oper = new OperationSub();
break;
}
case "*":
{
oper = new OperationMul();
break;
}
case "/":
{
oper = new Operationp();
break;
}
}
return oper;
}
}

ファクトリを呼び出すには、除算演算子を返すことができるcreateOperator("/")が必要です。

利点: クライアントはコードを変更する必要がありません。

欠点: 新しい操作クラスを追加する必要がある場合、新しい操作クラスが追加されるだけでなく、ファクトリ クラスも変更されるため、開始と終了の原則に違反します。

ファクトリメソッドパターン

UML クラス図は次のとおりです:

これは、単純なファクトリパターンが 1 つしか持たないのに対し、ファクトリメソッドパターンはそれぞれに対応するファクトリを持ちます。製品

利点: 増加 オペレーション クラス (N 乗クラスなど) の場合、オペレーション クラスと対応するファクトリを追加するだけで済みます。2 つのクラスの場合、ファクトリ クラスを変更する必要はありません。

欠点: オペレーション クラスを追加すると、ファクトリ メソッドは単純なファクトリの内部ロジックの判断をクライアントに移動するだけです。

抽象ファクトリパターン:

UMLクラス図は次のとおりです:

画像から、これがファクトリメソッドパターンに非常に似ていることがわかりますが、いくつかの違いがあります:

抽象ファクトリパターンたとえば、Microsoft 工場 (SqlserverFactory に相当) では、Microsoft マウス (マウス カテゴリに属し、マウス カテゴリには SqlserverDepartment に相当する HP マウス、Microsoft マウスなどがあります) を製造できます。また、Microsoft キーボード (キーボード カテゴリに属し、その下には HP キーボード、Microsoft キーボードなどがあり、上の図の IUser の下にある SqlserverUser および AccessUser に相当します) を作成することもできます。 )。


工厂方法模式:一个抽象产品类,可以派生出多个具体产品类。 
  一个抽象工厂类,可以派生出多个具体工厂类。 
  每个具体工厂类只能创建一个具体产品类的实例。 
  抽象工厂模式:多个抽象产品类,每个抽象产品类可以派生出多个具体产品类。 
  一个抽象工厂类,可以派生出多个具体工厂类。 
  每个具体工厂类可以创建多个具体产品类的实例。 

  区别:工厂方法模式只有一个抽象产品类,而抽象工厂模式有多个。
  工厂方法模式的具体工厂类只能创建一个具体产品类的实例,而抽象工厂模式可以创建多个。

利点: Access データベースと SQLServer データベース間の切り替えなど、製品ファミリーを簡単に交換できます。

短所: たとえば、シャーシ製品を追加するには、「シャーシ クラス、Microsoft シャーシ、HP シャーシ」の 3 つのカテゴリを追加する必要があるだけでなく、HP 工場も変更する必要があり、Microsoft 工場はシャーシの製造をサポートします。 Lenovo ファクトリを追加する場合、3 つのクラスを追加するだけで済みます。Lenovo ファクトリを使用するには、クライアント コードを変更する必要があります。

「Dahua Design Patterns」では、抽象的なファクトリーパターンを改良するために単純なファクトリーパターンを使用することが提案されています。

DataAccessのコードは以下の通りです:

このように、データベース(またはブランド)を変更する必要がある場合、DataAccess内のコードを直接DataAccessで指定します。変更されます。

もちろん、この方法では、構成ファイルを変更するだけで、リフレクションを使用してデータベースを変更できます。これは抽象ファクトリの欠点を完全に改善しており、クライアント側でコードを変更する必要はありません。

リフレクション実装:

db属性を変更するには:

以上がJava のファクトリ パターンのグラフィカル コード分析の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。