What do singletons, utility classes, and dependency injection have in common? All three worry about controlling instantiation - when, how, and by whom? Effective Java items 3, 4, and 5 have something to say about that.
Utilities, Singletons and Dependency Injection - Effective Java, Items 3-5
Mildly surprising (to me), it makes sense to discuss these three patters in one video - so here it goes