Контейнер властивостей () — шаблон проєктування, який дозволяє розширювати властивості об'єкта під час виконання програми.
Переваги та недоліки
Переваги
Дозволяє змінювати об'єкт під час виконання програми. Оскільки назва властивості описується стрічкою, це дозволяє використати довільний ідентифікатор обійшовши обмеження мови програмування. Наприклад, назва властивості може містити пропуски, починатись із цифри тощо. Корисний коли наперед невідомо, яку властивість треба використати, при цьому механізм рефлексії не підтримується.
Недоліки
Втрачається сувора типізація властивостей. Контейнер властивостей по суті являється геш-таблицею. Однак із точки зору ООП представляти конкретні об'єкти не їх типом, а структурою даних вважається некоректним.
Реалізація
Нехай, необхідно заповнювати об'єкт властивостями в міру їх появи у системі. Тоді опишемо інтерфейс нашого класу.
Для того, щоб не дублювати логіку контейнера властивостей у багатьох класах її можна винести в базовий клас ієрархії.
Тепер опишемо конкретний клас.
Тоді властивості можна додавати та видаляти під час виконання програми, наприклад отримуючи команди від користувача.
Деякі динамічні мови програмування підтримують цей шаблон, за допомогою вбудованого механізму мови, наприклад, JavaScript. Наступні способи ініціалізації об'єктів ідентичні.
Див. також Рефлексія (програмування) Геш-таблиця
Джерела Шаблоны проектирования. Введение