staticファクトリーメソッドの長所 その2

前回(staticファクトリーメソッドの長所 その1)に引き続き、今日もstaticファクトリーメソッドの長所を書いちゃいます。

コンストラクタと異なり、メソッドが呼び出されるごとに新たなオブジェクトを生成する必要がない

コンストラクタの場合は、メソッドを呼び出すごとに新しいオブジェクトを生成する。 例えば、以下のようなソースの場合、まったく同値のオブジェクトでもOKだが、name1とname2は別々のオブジェクトになる。

        Name name1 = new Name("日本太郎");
        Name name2 = new Name("日本太郎");

通常のクラスの場合は、オブジェクトの生成コストが低いので、上のようなソースでもパフォーマンスに影響を与えない。

逆に、オブジェクトの生成コストが高い(DBコネクション生成等)場合は、パフォーマンスに影響を与えるので、注意が必要。
このような場合は、あらかじめ生成しておいたオブジェクトをstaticファクトリーメソッドで返却してあげて、オブジェクトの生成を1回にすることが可能。

具体的なstaticファクトリメソッドは、以下の感じ。

public class DbConnector {

    private static DbConnector dbConnector;

    public static DbConnector getInstance() {
        if (dbConnector == null){
            dbConnector = new DbConnector();
        }
        return dbConnector;
    }
}