Java デザイン パターン - 単純なファクトリ パターン (質問を含む)

ヒント: 記事を作成した後、目次を自動的に生成できます。生成方法は、右側のヘルプドキュメントを参照してください。

記事ディレクトリ

  • シンプルなファクトリーパターン
  • コード
  • エクササイズ

 1. 定義:

さまざまなパラメータに従ってさまざまなクラスのインスタンスを返すことができるファクトリ クラスを定義します。作成されたインスタンスは通常、共通の親クラスを持ちます。ファクトリは 1 つのことだけを行い、単純なファクトリ パターンは通常、オブジェクトを静的メソッドとして作成するため、静的ファクトリ パターンと呼ぶこともできます。

構造:

        1. ファクトリ (ファクトリ ロール): これは単純なファクトリ パターンの中核であり、すべてのインスタンスを作成する内部ロジックの実装を担当します。ファクトリ クラスでプロダクト クラスを作成するメソッドは、外部から直接呼び出して、必要なプロダクト オブジェクトを作成できます。

        2. Product (抽象プロダクトの役割): これは、単純なファクトリによって作成されるすべてのオブジェクトの親クラスであり、すべてのインスタンスによって共有される共通のインターフェイスを記述する責任があります。

        3. ConcreteProduct (特定の製品の役割): 単純な工場モデルの作成ターゲットです

 長所と短所:

        アドバンテージ:

        1. ファクトリ クラスには必要な論理判断が含まれており、どの製品のインスタンスをいつ作成するかを決定できます。クライアントは製品オブジェクトを直接作成する責任を免除され、製品を「消費」するだけとなり、オブジェクトの作成と使用の分離が実現します。

        2. クライアントは、作成する特定の製品のクラス名を知る必要はなく、パラメータのみを知る必要があります。

        3. 構成ファイルを導入して、クライアント コードを変更せずに新しい特定の製品カテゴリを置き換えたり追加したりすることで、システムの柔軟性が向上します。

        欠点:

       1. 単純なファクトリモデルのファクトリクラスは単一であり、すべての製品の作成を担当しており、責任が重すぎ、一度例外が発生するとシステム全体に影響を及ぼします。

        2. 単純なファクトリ パターンを使用すると、システム内のクラスの数が増加し (新しいファクトリ クラスの導入)、システムの複雑さと理解の難しさが増します。

        3. システムの拡張が難しい 新しい製品が追加されると工場のロジックを変更する必要がある 製品の種類が多いとロジックが複雑になりすぎる場合がある

        4. シンプル ファクトリ パターンは静的ファクトリ メソッドを使用しており、ファクトリの役割が継承に基づいて階層構造を形成することを防ぎます。

2、クラス図

 

3. コード
 

package simpleFactory;
//手机抽象类(抽象产品类)
public abstract class Phone {
    String type;
    public abstract void showType();
}
package simpleFactory;
//具体产品类(iphone手机类)
public class Iphone extends Phone{

	@Override
	public void showType() {
		type="iphone";
		System.out.println(type);
	}

}

package simpleFactory;
//简单工厂(手机工厂)唯一的
public class PhoneFactory {
	public static Phone getPhone(String type) {
		Phone phone=null;
		//根据手机类型type的值,进行对象的创建
		if ("iphone".equals(type)) {
			phone=new Iphone();
		}
		if ("vivo".equals(type)) {
			phone=new Vivo();
		}
		return phone;
	}
}
package simpleFactory;
//具体产品类(vivo手机类)
public class Vivo extends Phone{

	@Override
	public void showType() {
		type="vivo";
		System.out.println(type);
	}

}
package simpleFactory;

public class Test {
	public static void main(String[] args) {
		Phone phone;
		phone=PhoneFactory.getPhone("vivo");
		phone.showType();
	}
}

4. 例


V. まとめ

 製品タイプが比較的少ない場合は、単純なファクトリー モデルの使用を検討してください。

クライアントは受信パラメータのみを認識し、オブジェクトを作成しません。

おすすめ

転載: blog.csdn.net/weixin_60249074/article/details/124947136