Что такое Lazy Initialization?

в чём по существу заключается этот подход и чем он отличается от возможно других подходов инициализации?

Lazy Initialization вопреки своему названию переводится как "инициализация по требованию", а не "ленивая инициализация".

Инициализация по требованию - это процесс загрузки необходимых данных, при чём только тогда, когда они действительно нужны.

Существует 4 основных способа реализации загрузки данных по нужде (или требованию) :

  • Инициализация по требованию - при каждой попытке доступа к полю сначала выполняется проверка на NULL: если NULL => то метод доступа загружает значение поля, а потом возвращает его. Использование удобное и простое, за исключением невозможности использования в ситуациях, когда NULL это допустимое значение.
  • Виртуальный прокси - происходит имитация объекта-значения поля (но в реальности его нет). В таком случае загрузка будет выполнена лишь тогда, когда будет вызван один из методов виртуального прокси-объекта.
  • "Призрак" (фиктивный объект) - как ни странно, это не "призрачный", а совершенно реальный объект, но с неполным состоянием. Когда такой объект загружается из БД, в нём содержится только его ID. Во время первой попыте доступа к одному из его полей объект загружает все остальные значения.
  • Диспетчер значения - Объект-оболочка для другого объекта. Загрузка, опять-таки, будет выполнена только тогда, когда будет вызван один из методов виртуального прокси-объекта.