结构化对象的高性能装饰器模式

时间:2013-03-03 12:58:37

标签: c++ performance oop design-patterns decorator

想象一下,我有一个庞大的数据结构,让我们说一个巨大的vector,其创建不受我的控制(即我不能修改它的静态类型),包含类InitialFunctionality的对象。在C ++中:

class InitialFunctionality
{
 public:
 void iCanDoThis();
}

hugeVector vector<InitialFunctionality>; // <- lots of elements inside! :)

我的目标是动态扩展InitialFunctionalityhugeVector对象的功能,尽可能降低性能影响,让我们说:

class ExtraFunctionality: public InitialFunctionality
{
 public:
 int iOfferThisToo;
}

众所周知的Decorator pattern非常适合非结构化对象。您可以使用它来动态扩展InitialFunctionality类中对象的功能,并且在此之后愉快地传递它们。

但是如何扩展hugeVector中的对象而不改变其排序和最小的性能影响?例如,由于它的大小,复制矢量是不可行的。

我正在考虑为向量使用某种Adapter,它保留对原始hugeVector的引用,并根据需要懒惰地转换所包含的对象(即,当访问适应的向量元素时) 。然而,除了转换本身(即初始化iOfferThisToo),这是任何方法所需要的,这需要保持高速缓存以检查对象是否已经被转换。这样的缓存可能非常昂贵。

1 个答案:

答案 0 :(得分:-1)

如果您没有添加额外的成员,您应该可以执行以下操作:

class myInternalFunctionality : public InternalFunctionality {
public:
    //new features
    void ICanDoThis();

private:
    // disable all ctors
};

然后重新指向向量中的InternalFunctionality。

myInternalFunctionality* myInternalPtr = &hugeVector[i];
myInternalPtr->ICanDoThis();

既然你是,我认为你遇到了一些麻烦。