想象一下,我有一個龐大的數據結構,比如說一個巨大的數據結構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'? – 2013-03-03 13:31:30
@AndyProwl假設你的意思是'InitialFunctionality'的定義:不,它不在我的控制之下。否則,我將能夠在那裏添加我的額外功能。這在設計方面可能被認爲是醜陋的,但在我看到的性能方面會很好。 – fons 2013-03-03 13:36:32