ファクトリメソッドパターンは、オブジェクトを取得するメソッドを実装するパターンです。利用側はオブジェクトの作成手順や作成されるオブジェクトの種類を意識せずにオブジェクトの取得を行えます。
また、
通常コンストラクタを呼び出し、オブジェクトを生成、そのオブジェクトを利用しますが、このようにしてしまうとオブジェクトを生成した側、つまり利用する側が、利用したい具象クラスを指定する必要があり、クラス間の結合度が強くなってしまいます。しかしファクトリパターンを利用すれば、直接のクラス間の依存関係を解消して、保守性を高めることもできます。
public class Penguin20160523 { public static void main(String[] args) { // ファクトリメソッドを利用する側 Factory.getInstance(Boolean.valueOf(args[0])); } } interface Player { void play(); } class DVDPlayer implements Player { public void play() { }; } class VideoPlayer implements Player { public void play() { }; } class Factory { // ファクトリーメソッド public static Player getInstance(boolean b) { if (b) { return new DVDPlayer(); } else { return new VideoPlayer(); } } }
いちいちメソッドを使うためにFactoryクラスをnewする必要はないので、getInstance()はstaticメソッドになっている。
ファクトリメソッドは慣例的にstaticになる。