制御フラグ

というわけで、前に制御結合がよくわからないという話を書いたことがあるが、それと似たような話(?)。


例えば、以下のようなFactoryクラスがある。

public class HogeFactory{
	public static Hoge create(int flag){
		switch(flag){
		case 0:
			return new Hoge0();
		case 1:
			return new Hoge1();
		//....
		default: return null;
		}
	}
}

で、flag使って、しかもswitchで分けるのはよくないんじゃね?と言って、以下のようなメソッドに分ける。

public class HogeFactory{
	public static Hoge createHoge0(){
		return new Hoge0();
	}
	public static Hoge createHoge1(){
		return new Hoge1();
	}
}

これはやったほうがいいだろうか?
確かに、これなら呼び出し側ではflagを渡さなくていい。メソッドも具体的になってなんのインスタンスを生成しているかがわかりやすい。
でも、呼び出し側は、どのインスタンス(というかメソッドだけど)を呼ぶかまである程度意識してメソッド呼び出しを書く必要があることになる。
(前者の方は、フラグの意味は「フラグに適したインスタンスを返すこと」だとわかっているので、createにフラグを渡して呼んでやるだけでいい。)

ので、俺的には、どれを呼び出すかをフラグで制御した方がなんとなく自然な気がしたのですが、、、多分分けたほうがよいんだろうなぁ。


でも入力を受け取って、それをフラグにしてインスタンス生成する時とかもあるだろうから、両方用意したほうがいい気もする。でもメソッド多くなってキモい気もする。
結局場合によりけりかねぇ・・・。

public class HogeFactory{
	public static Hoge create(int flag){
		switch(flag){
		case 0:
			return createHoge0();
		case 1:
			return createHoge1();
		//....
		default: return null;
		}
	}
	public static Hoge createHoge0(){
		return new Hoge0();
	}
	public static Hoge createHoge1(){
		return new Hoge1();
	}
}