I\'m developing a simple tree-structured database and I\'m usually setting dependencies or optional settings via a Builder (Builder pattern). Now I\'m not sure when to use for i
I'm a firm believer in that you don't need to use dependency injection for everything.
For a LookupService it would be natural inject a Dictionary such that its implementation can be swapped out by configuration.
For a Firewall on the other hand. It would be natural for it to create its own FireWallRules, perhaps through a supplied Factory or a Builder.
As a guideline, inject what you need to configure, don't automatically inject everything else.
Consider a static factory (*) when
Lists.newArrayList()Consider instance factories when
AbstractFactory design patternConsider a builder when
(*) Static methods are not always testable and the presence of one should in my opinion always be motivated.
A typical usecase for a factory is to decrease coupling. By using a static factory that ability is completely lost.