Хорошим примером IoC является база данных, издевательская. При написании приложения вам может понадобиться перенести объекты для извлечения или использования в какой-то более поздний момент времени. Ну, абстрагироваться от базы данных, необходимо создать интерфейс с методом, как это:
Interface DbSaver
+void save(MyObject myObject)
+MyObject load(String id)
Без IoC, вы бы что-то вроде этого:
DbSaver saver = new DefaultDbSaver();
или вы бы просто определить реализацию , и доступ к нему в качестве одноэлементных (который изначально представляется целесообразным для объекта манипулирования базами данных):
MyDbSaver saver = MyDbSaver.getInstance();
с IoC, вы можете переключить реализацию DbSaver даже перекомпилировать ваше приложение (по крайней мере Spring предоставляет это). То есть, не меняя никакого кода, вы можете использовать одну реализацию над другой. С объектами доступа к базе данных наиболее распространенной задачей является создание реализации по умолчанию, которая хранит все в памяти. Когда вы завершаете разработку, структуру или технологию базы данных, вы можете продолжать создавать свое приложение, не беспокоясь о том, как данные сохраняются. Вы просто работаете в интерфейсе.
Таким образом, бизнес-объекты отделены от интеграции баз данных, что имеет огромное преимущество, позволяя параллельно разрабатывать обе части.
Карусельный способ избежать дорогостоящего приведения типов, который мы должны получить –