Как я могу предотвратить строительство с помощью Object Pool - PullRequest
1 голос
/ 18 октября 2011

Я хочу использовать шаблон проектирования «Пул объектов» для своей библиотеки, чтобы пользователь не мог создавать более заранее определенного числа объектов.
Как заставить пользователя использовать класс Pool для получения экземпляра вместо этого?конструктора ресурса?

Я не могу объявить конструктор ресурса закрытым, потому что тогда класс пула тоже не сможет создать экземпляр ...

Спасибо

Ответы [ 2 ]

0 голосов
/ 18 октября 2011

Пулу не нужно , чтобы отделиться от самого класса, иначе класс может быть объединен в пул и т. Д.

Экземпляры будут извлекаться из пула (самодостаточного) объекта, например, синглтона, но сколько угодно.

Вы также можете играть в игры с наглядностью, но то, как это сделать, зависит от языка, и IMO, вероятно, не стоит усилий - используйте шаблон, похожий на одиночный, но вместо этого используйте n объекты. одного.

0 голосов
/ 18 октября 2011

используйте состав и класс, который содержит коллекцию. IOW, вы даете им тип обертки вокруг коллекции, который регулирует видимость и управляет созданием объекта.

Если вы действительно хотите еще больше ограничить создание ресурса, вы можете связать без дружбы, используя этот подход (увидев комментарии c ++ / friend):

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);
        }
    }
};
...