1.ジェネレータの代わりに静的ファクトリ(factory)法を用いることを考慮する


出典:機能Java(第2版)
public static factoryメソッドを使用してクラスのインスタンスを生成し、ジェネレータを使用してインスタンスを生成するのではなく、返す方法があります.
public static Boolean valueOf(boolean b) {
	return b ? Boolean.TRUE : Boolean.FALSE;
}
デザインパターンはこれと同じではありません.
静的工場法の利点

  • 静的ファクトリメソッドは生成者とは異なり,独自の名前を持つことができる.

  • 呼び出すたびに新しいオブジェクトを作成する必要はありません.
  • Fly 8パターンに類似する
  • 同じオブジェクト(インスタンス)を頻繁に使用する場合、オブジェクトの作成に多くのリソースまたは時間がかかる場合、プログラムのパフォーマンスを大幅に向上させることができます.
  • は常に同じオブジェクトを返すので、クラスはインスタンスの存在(インスタンス制御クラス)
  • を直接制御することができる.
    メソッド
  • の代わりに==演算子を使用できます.

  • 自分が返すタイプのサブタイプ(サブタイプ)オブジェクトを返すことができます.

  • パラメトリックタイプインスタンスを生成するコードを簡略化します.
    Map<String, List<String>> m = new HashMap<String, List<String>>();
    static factoryを使用すると、この問題を解決できます.これを類型推論と呼ぶ.例えば、HashMapは、以下の静的プラント方法を提供すると仮定する.
    public static <K, V> HashMap<K, V> newInstance() {
    	return new HashMap<K, V>();
    }
    ...
    Map<String, List<String>> m = HashMap.newInstance();
  • 静的工場法の欠点
  • publicは、保護されたジェネレータがないため、サブクラスを持つことはできません.(継承できません.)
    このような欠点が長所になる可能性もある.これは,継承の代わりに複合語(合成)を用いることが許されるためである.
  • は他の静的方法と区別しにくい.
    静的工場法は他の方法と混合されているため,うまく区別できない.したがって、インスタンスの作成方法を知るのは難しい.
  • 通常、静的ファクトリメソッドはより良いので、まず静的ファクトリメソッドを考慮しないで、公共ジェネレータを不用意に使用する習慣を避けてください.