Как предотвратить строительство с помощью бассейна объектов
-
25-10-2019 - |
Вопрос
Я хочу использовать шаблон проектирования пула объектов для моей библиотеки, чтобы пользователь не мог создать больше, чем предопределенное количество объектов.
Как я могу заставить пользователя использовать класс пула для получения экземпляра, а не конструктора ресурса?
Я не могу объявить конструктор ресурсов частным, потому что тогда класс пула тоже не сможет создать экземпляр ...
Спасибо
Решение
Используйте композицию и класс, который содержит коллекцию. IOW, вы даете им тип обертки вокруг коллекции, которая настраивает видимость и обрабатывает создание объектов.
Если вы действительно хотите еще больше ограничить создание ресурсов, вы можете связать без дружбы, используя этот подход (увидев комментарии C ++/друга):
class t_resource {
private:
t_resource();
public:
~t_resource();
static void AddToResourcePool(t_resource_pool& resourcePool) {
if (resourcePool.isFull()) {
/* error */
}
else {
resourcePool.addResource(new t_resource);
}
}
};
Другие советы
Бассейн нет необходимость быть отдельным от самого класса, или класс может сочинять в бассейне и т. Д.
Примеры будут извлечены из бассейна объекта (автономного), как синглтон, но как кто-то, кто-то-ты-впал.
Вы также можете играть в игры с видимостью, но как это сделать, зависит от языка, и IMO, вероятно, не стоит усилий-использовать синглтонский рисунок, но с не объекты вместо одного.