- Ленивая инициализация
-
Отложенная (ленивая) инициализация (англ. Lazy initialization). Приём в программировании, когда некоторая ресурсоёмкая операция (создание объекта, вычисление значения) выполняется непосредственно перед тем, как будет использован её результат. Таким образом, инициализация выполняется «по требованию», а не заблаговременно. Аналогичная идея находит применение в самых разных областях: например, и логистическая концепция «Точно в срок».
Частный случай ленивой инициализации — создание объекта в момент обращения к нему — является одним из порождающих шаблонов проектирования. Как правило, он используется в сочетании с такими шаблонами как Фабричный метод, Одиночка и Заместитель.
Содержание
Достоинства
- Инициализация выполняется только в тех случаях, когда она действительно необходима;
- ускоряется начальная инициализация.
Недостатки
- Невозможно явным образом задать порядок инициализации объектов;
- возникает задержка при обращении к объекту.
Примеры реализации
public class SomeObject { static SomeObject singleInstance = null; String msg; private SomeObject() { msg = "Instance of SomeObject have been created."; } public String toString() { return msg; } // Метод возвращает экземпляр SomeObject, при этом он // создаёт его, если тот ещё не существует public static SomeObject getObject() { if (singleInstance == null) singleInstance = new SomeObject(); return singleInstance; } } public class Main { private static long totalMemory; // Этот флаг определяет, было ли выполнено вычисление private static boolean isCalc = false; private static long getTotalMemory() { // Определяем значение totalMemory только при первом вызове if (!isCalc) { totalMemory = Runtime.getRuntime().totalMemory() / 1024; isCalc = true; } return totalMemory; } public static void main(String[] args) { // Здесь значение будет вычислено System.out.println("Total amount of memory: " + getTotalMemory() + " KB"); // Здесь будет использовано значение, сохранённое в переменной if (getTotalMemory() > 1024) { System.out.println(SomeObject.getObject()); } } }
- Русскоязычные сайты
порождающие шаблоны проектирования |
абстрактная фабрика | строитель | фабричный метод | прототип | одиночка | отложенная инициализация |
Ссылки
Wikimedia Foundation. 2010.