Почему люди по умолчанию используют DI против глобальной фабрики с хэш-картой, которая отображает интерфейсы / рефераты в классы? Казалось бы, это более высокопроизводительное решение проблемы нет?
Все вещи, упомянутые до сих пор в этой теме, могут быть предоставлены глобальной фабрикой с помощью метода, подобного:
TestGlobalFactory implements GlobalFactoryI
ProductionGlobalFactory implements GlobalFactoryI //configures classes to interfaces
protected GlobalFactoryI gf=GlobalFactoryFactory.getInstance(); //only singleton used in app, specifies which GlobalFactory to use
protected SportsCarI mySportsCar=gf.new("sportsCarI",constructorVar1,constructorVar2);
Вышеупомянутое будет намного быстрее, чем рекурсивное отражение, чтобы обнаружить экземпляры DI.
Однако я признаю, что предпочитаю соглашение DI, так как в итоге получается меньше символов и больше гибкости с возможностью сторонних контейнеров.
artima.com / forums / flat.jsp? Forum = 106 & thread = 238700
Независимо от DI, это лучший подход, так как он имеет контейнеры, написанные для указания, какая реализация принадлежит какому классу. С Service Locator фактически нужно было бы сделать gf.new ("thisClass", "sportsCarI", constructor1)