Это все хорошо, но смысл ленивой загрузки - избегать загрузки (как правило, неуправляемых) ресурсов (попадания в базу данных, файловую систему и т. Д.) До тех пор, пока вам это не понадобится, что позволяет избежать их приоритетной загрузки при это действительно нужно. Использование одноэлементного шаблона само по себе не обязательно подразумевает ленивую загрузку, поскольку вы можете совершенно правильно создать управляемый экземпляр в любой точке.
Аспект отложенной загрузки вступает в игру, если к любым загружаемым ресурсам обращаются только при соответствующем вызове метода; если, когда этот экземпляр синглтона создается, он выполняет целую кучу запросов к базе данных и сохраняет результат, то это не ленивая загрузка, насколько я понимаю.
Что касается сценариев ORM, ленивая загрузка обычно относится непосредственно к отложению загрузки другого объекта в отношениях до первого доступа, что позволяет избежать выполнения второго, потенциально ненужного запроса.
Опять же, если вы знаете, что будете перемещаться по этим отношениям в ходе использования вами объекта (т. Е. Если вы получили User
, чтобы перечислить их Posts
или что-то в этом роде), тогда вы, вероятно, захотите дать команду вашему ORM загружать связанные объекты одновременно, что обычно дает подсказку для выполнения одного запроса с объединением, а не для циклического выполнения и выполнения нескольких запросов позже; в этом случае вам не нужна ленивая загрузка.