Javaの一般的なデザインパターンの抽象的なファクトリパターン

I.概要

抽象ファクトリパターンは、デザインパターンの作成パターンでもあり、製品ファミリの構築に使用されます。抽象ファクトリパターンは、すべての形式のファクトリパターンの中で最も一般的な形式です。抽象ファクトリとは、複数の役割がある場合に使用されるファクトリパターンを指します。抽象ファクトリパターンは、クライアントへのインターフェイスを提供できます。これにより、クライアントは、製品を指定しなくても、複数の製品ファミリの製品オブジェクトを作成できます。

2.モード構造図

ここに画像の説明を挿入

3、Javaコードの実装

果物を例にとってみましょう。まず、果物のインターフェースと果物の工場のインターフェースを別々に作成する必要があります。

package 抽象工厂模式;

public interface Fruit {
    
    
//	生产水果-接口
	public void get();
}
package 抽象工厂模式;

public interface FruitFactory {
    
    
	public Fruit getApple();
	public Fruit getBanana();
}

具体的なフルーツの抽象クラスを作成し、具体的なフルーツの抽象クラスにフルーツインターフェイスを実装させます

package 抽象工厂模式;

public abstract class Apple implements Fruit{
    
    
//	苹果抽象类
	public abstract void get();
}
package 抽象工厂模式;

public abstract class Banana implements Fruit{
    
    
//	香蕉抽象类
	public abstract void get();
}

特定の果物カテゴリを作成します。各果物はAとBの2つのレベルに分けられます。

package 抽象工厂模式;
//Apple_A 继承Apple
public class Apple_A extends Apple{
    
    
	@Override
	public void get() {
    
    
		System.out.println("生产A级-苹果");
	}
}
package 抽象工厂模式;
// Apple_B继承Apple类
public class Apple_B extends Apple{
    
    
	@Override
	public void get() {
    
    
		System.out.println("生产B级-苹果");
	}
}

Aレベルの果物とBレベルの果物をそれぞれ生産するタイプAファクトリとタイプBファクトリ作成し、ファクトリインターフェイスを実装します

package 抽象工厂模式;
//	FruitFactory_calssA 要去实现 FruitFactory
public class FruitFactory_calssA implements FruitFactory{
    
    
//  A级水果工厂只生产A级水果
	@Override
	public Fruit getApple() {
    
    
//		生产A级苹果
		return new Apple_A();
	}

	@Override
	public Fruit getBanana() {
    
    
//		生产A级香蕉
		return new Banana_A();
	}

}
public class FruitFactory_calssB implements FruitFactory{
    
    
//   B级水果工厂只生产B级水果
	@Override
	public Fruit getApple() {
    
    
//		生产B级苹果
		return new Apple_B();
	}

	@Override
	public Fruit getBanana() {
    
    
//		生产B级香蕉
		return new Banana_B();
	}

}

デモを呼び出す*

package 抽象工厂模式;

public class test {
    
    
public static void main(String[] args) {
    
    

	FruitFactory f1 = new FruitFactory_calssA();
	FruitFactory f2 = new FruitFactory_calssB();
//	Apple
	Fruit apple_A = f1.getApple();
	apple_A.get();
	Fruit apple_B= f2.getApple();
	apple_B.get();
// 	Banana
	Fruit banana_A = f1.getBanana();
	banana_A.get();
	Fruit banana_B = f2.getBanana();
	banana_B.get();
}
}

ここに画像の説明を挿入

第四に、ファクトリメソッドパターンと抽象ファクトリパターンの比較

ファクトリメソッドパターンの各フォームは特定の問題の解決策であり、複数の製品シリーズ構造を対象としています。一方、抽象ファクトリパターンは複数の製品ファミリ構造を対象としており、製品内には複数の製品シリーズがあります。

おすすめ

転載: blog.csdn.net/weixin_44676935/article/details/105066026