ファクトリメソッドの目的は、作成されたオブジェクトと使用されたオブジェクトを分離することであり、クライアントは常に抽象ファクトリと抽象製品を参照します。
1.静的ファクトリメソッド:
次のようなJava標準ライブラリの静的メソッド:Integer.valueOf();
Integerは製品であり静的なファクトリでもあり、Integerを作成するための静的なファクトリvalueOf()を提供します。
public final class Integer {
public static Integer valueOf(int i) {
if (i >= IntegerCache.low && i <= IntegerCache.high)
return IntegerCache.cache[i + (-IntegerCache.low)];
return new Integer(i);
}
...
}
利点は、静的ファクトリーメソッドを内部で最適化できることです。これにより、Integerの新しいインスタンスを返すか、キャッシュされたIntegerインスタンスを直接返し、リソースを節約できます。ファクトリメソッドは、製品の作成の詳細を隠すことができ、必ずしも毎回製品を作成する必要はありません。キャッシュされた製品を返すことができるため、速度が向上し、メモリ消費が減少します。静的ファクトリメソッドList.of();
List <String> list = List.of( "A"、 "B"、 "C");
ArrayList <String> list = List.of( "A"、 "B"、 "C");呼び出し元が取得する製品は常にListインターフェースであり、実際のタイプを気にせず、変更してjava.ArrayListを返すことができます。これはリヒター置換の原則です。インターフェースを実装するサブクラスを返す
と、メソッドの要件を満たすことができます、および呼び出し元には影響しません。常に実装クラスの代わりにインターフェースを参照してください。これにより、呼び出し元に影響を与えずにサブクラスを呼び出すことができ、可能な限り抽象的なプログラミングが行われます。