Пул объектов (Object Pool) — различия между версиями
Admin (обсуждение | вклад) (→Варианты) |
Admin (обсуждение | вклад) (→Достоинства и недостатки) |
||
Строка 29: | Строка 29: | ||
=== Достоинства и недостатки === | === Достоинства и недостатки === | ||
− | * | + | * |
+ | *Недостаток: после того, как объект возвращён, он должен вернуться в состояние, пригодное для дальнейшего | ||
+ | использования, а для этого может потребоваться дополнительное программирование | ||
+ | *Недостаток: если в объекте есть секретные данные, то после его использования необходимо позаботиться о стирании этих данных | ||
=== Варианты === | === Варианты === |
Версия 07:19, 7 октября 2014
Назначение
Обеспечивает интерфейс для работы с набором инициализированных и готовых к использованию объектов.
Описание
Создание экземпляров некоторого класса может требовать довольно больших затрат. В этом случае решением может быть создание в начале работы программы объектного пула - набор инициализированных и готовых к использованию объектов. Когда системе требуется объект, он не создаётся, а берётся из пула. Когда объект больше не нужен, он не уничтожается, а возвращается в пул.
Особенно заметно повышение производительности когда объекты часто создаются-уничтожаются, но одновременно существует их небольшое число.
Использование
Паттерн Пул объектов используется когда:
- Программа может создать только ограниченное число экземпляров некоторого класса
- Экземпляры класса являются взаимозаменяемыми. Если есть сразу несколько экземпляров, то можно выбрать любой.
- Объект требует значительных ресурсов на свое создание
- Объекты постоянно создаются-уничтожаются и в каждый момент времени используется небольшое их число
Реализация
Диаграмма классов
Участники
Пример
Достоинства и недостатки
- Недостаток: после того, как объект возвращён, он должен вернуться в состояние, пригодное для дальнейшего
использования, а для этого может потребоваться дополнительное программирование
- Недостаток: если в объекте есть секретные данные, то после его использования необходимо позаботиться о стирании этих данных
Варианты
Если в пуле нет ни одного свободного объекта, возможна одна из трёх стратегий:
- Расширение пула.
- Отказ в создании объекта, аварийный останов.
- В случае многозадачной системы, можно подождать, пока один из объектов не освободится.