【发布时间】:2013-02-17 14:49:24
【问题描述】:
假设我有一个大数据结构,比如说一个巨大的vector,它的创建不在我的控制之下(即我不能修改它的静态类型),包含类InitialFunctionality 的对象。在 C++ 中:
class InitialFunctionality
{
public:
void iCanDoThis();
}
hugeVector vector<InitialFunctionality>; // <- lots of elements inside! :)
我的目标是动态地扩展hugeVector 中InitialFunctionality 对象的功能,同时尽可能降低对性能的影响,比如说:
class ExtraFunctionality: public InitialFunctionality
{
public:
int iOfferThisToo;
}
众所周知的Decorator pattern 非常适用于非结构化对象。您可以使用它从InitialFunctionality 类中动态扩展对象的功能,然后愉快地传递它们。
但是如何在不改变其顺序且对性能影响最小的情况下扩展hugeVector 中的对象呢?例如,由于它的大小,复制向量是不行的。
我正在考虑对向量使用某种Adapter,它保留对原始hugeVector 的引用,并根据需要懒惰地转换包含的对象(即在访问适应的向量元素时)。然而,除了转换本身(即初始化iOfferThisToo),这是任何方法都需要的,这需要保留一个缓存来检查一个对象是否已经被转换。这样的缓存可能真的很昂贵。
【问题讨论】:
-
InitialFunctionality在你的控制之下吗? -
@AndyProwl 假设您的意思是
InitialFunctionality的定义:不,它不在我的控制之下。否则我可以在那里添加我的额外功能。这在设计方面可能被认为是丑陋的,但在性能方面会很好,这正是我所寻找的。span>
标签: c++ performance oop design-patterns decorator