ふぃーるどのーつ

技術系ブログ「ふぃーるどのーつ」

イケメンスーツのためのポリモフィーズム講座

インスタンス生成の部分のコードでは結局ifやswitchがあるじゃん」っていうお悩みに対して、どう考えればよいのだろう?

これは、「if 文を書かないでも条件分岐できる」ということを知ると、視野が広がります。
例えば、

	private Map<Integer,Class<? extends AbstractDataReader>> readerMap;
	
	{
		readerMap = new HashMap<Integer, Class<? extends AbstractDataReader>>();
		readerMap.put(CSV, CSVDataReader.class);
		readerMap.put(XML, XMLDataReader.class);
	}
	
	AbstractDataReader create (int formartId) throws Exception{
		return readerMap.get(formartId).newInstance();
	}

のようにすると、if 文を書かないでも条件分岐できます。*1Strutsstruts-configを読み込んでやっていることもこれに近い。
DIの考え方に近づくとこういう風に「取りに行く」よりも「外から入れる」ことを好むようになりますが、それは次の段階の話。

*1: genericsがいけてませんが...