Ленивая инициализация

Ленивая инициализация

Отложенная (ленивая) инициализация (англ. 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.

Игры ⚽ Поможем решить контрольную работу

Полезное


Смотреть что такое "Ленивая инициализация" в других словарях:

  • Ленивая инициализация (шаблон проектирования) — Отложенная (ленивая) инициализация (англ. Lazy initialization). Приём в программировании, когда некоторая ресурсоёмкая операция (создание объекта, вычисление значения) выполняется непосредственно перед тем, как будет использован её результат.… …   Википедия

  • Отложенная инициализация — Шаблон проектирования Отложенная (ленивая) инициализация Lazy initialization Описан в Design Patterns Нет Отложенная (ленивая) инициализация (англ. Lazy initialization). Приём в программировании, когда некоторая ресурсоёмкая операция… …   Википедия

  • Отложенная инициализация (шаблон проектирования) — Отложенная (ленивая) инициализация (англ. Lazy initialization). Приём в программировании, когда некоторая ресурсоёмкая операция (создание объекта, вычисление значения) выполняется непосредственно перед тем, как будет использован её результат.… …   Википедия

  • Double checked locking — Шаблон проектирования Блокировка с двойной проверкой Double checked locking Описан в Design Patterns Нет Double checked locking (блокировка с двойной проверкой) шаблон проектирования, применяющийся в параллельном программировании. Он… …   Википедия

  • Порождающие шаблоны проектирования — Порождающие шаблоны (англ. Creational patterns)  шаблоны проектирования, которые абстрагируют процесс инстанцирования. Они позволяют сделать систему независимой от способа создания, композиции и представления объектов. Шаблон,… …   Википедия

  • Одиночка (шаблон проектирования) — У этого термина существуют и другие значения, см. Одиночка. Шаблон проектирования Одиночка Singleton Тип: порождающий Описан в Design Patterns Да Одиночка (англ. Singleton) в программировании  …   Википедия


Поделиться ссылкой на выделенное

Прямая ссылка:
Нажмите правой клавишей мыши и выберите «Копировать ссылку»