[英]Most efficient way to add data to an instance
我有一個類,比如說Person,它是由另一個類/模塊管理的,比如說PersonPool。
我的應用程序中還有另一個模塊,例如模塊M,它希望以最有效的方式將信息與人相關聯。 我考慮了以下替代方案:
在最后一種選擇中,可以通過使用稀疏矢量來解決該問題,但是我不知道稀疏矢量的實現是否非常有效(比map / hashmap更快)。
還有其他方法可以做到這一點嗎? 還是有一種有效的稀疏向量可以解決最后一種選擇的內存問題?
我會用map / hashmap安排解決方案的時間,如果性能足夠好,可以選擇它。 否則,您別無選擇,只能將這些屬性添加到類中,因為這是最有效的方法。
或者,您可以創建一個Person的子類,基本上將所有接口方法轉發到原始類,但添加所需的所有屬性,然后在對M的某些調用期間將原始Person更改為自己修改的那個。
這樣,模塊M將看到子類及其所需的所有屬性,但是所有其他模塊將其視為Person類的實例,並且將無法看到您的自定義屬性。
第一種和第三種是合理的通用技術。 第二個問題是動態編程語言(例如Python和Javascript)如何實現對象的成員數據,因此不要以不可思議的慢速將其拋棄。 第四點與關系數據庫的工作原理相同。 使關系數據庫像拍板一樣運行是可能的,但很困難。
簡而言之,您已經描述了4種廣泛使用的技術。 排除其中任何一種的唯一方法是針對您問題的詳細信息(所需的性能,人員數量,屬性數量,代碼中要執行此操作的模塊數量等)以及相應的度量。
模塊M的另一種可能性是定義一個從Person繼承的類,並添加額外的數據成員。 這里的原理是M的人的觀念與Person的人的觀念不同,因此將M的觀念描述為一個類。 當然,僅當在同一Person對象上運行的所有其他模塊都通過多態性來這樣做時,這才起作用,此外,如果可以使M負責創建對象(也許通過工廠的依賴注入),那么這才起作用。 這是一個很大的“如果”。 甚至更大的一個,如果除了M之外不需要對對象進行任何生命周期的操作,那么您可能可以使用組合繼承或私有繼承優先於公共繼承。 但是,如果模塊N要創建人員集合,然后模塊M想要向其附加額外的數據,則沒有任何用處。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.