如何使用对象池阻止构造

时间:2011-10-18 07:06:55

标签: design-patterns objectpool

我想为我的库使用对象池设计模式,这样用户就无法创建超过预定数量的对象。
如何强制用户使用Pool类来获取实例,而不是资源的构造函数?

我无法将资源构造函数声明为私有,因为那么池类将无法创建实例...

谢谢

2 个答案:

答案 0 :(得分:0)

使用合成和持有该集合的类。 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);
        }
    }
};

答案 1 :(得分:0)

需要与类本身分开,或者类可以在池中合成等。

实例将从对象的(自包含)池中检索,就像单身人士一样,但是你想要的人多得多。

你也可以玩具有可见性的游戏,但是如何这样做取决于语言,IMO可能不值得努力 - 使用类似单身的模式,但使用 n 对象,而不是一个。