http://www.codeproject.com/Articles/492900/From-No-Factory-to-Factory-Method