標準容器應該被子類化或繼承嗎?
在線上論壇上經常會遇到有關子類化或繼承標準實踐的問題容器。雖然這種方法對於擴展容器功能來說似乎很方便,但它引起了值得考慮的問題。
為什麼子類化標準容器是不可取的
-
缺乏虛擬析構函數:標準容器不具備虛擬析構函數。這意味著多態地使用它們可能會導致衍生類別中潛在的清理問題。
-
違反設計原則:子類化容器破壞了封裝,並違反了透過通用適用演算法擴展功能的基本原則。
-
擴展行為的限制:繼承不應該是主要方法擴展階級行為。這種方法將擴充功能綁定到介面契約,使將來的修改變得複雜。
更適合的方法
不要子類化標準容器,請考慮:
-
外部演算法: 實作運行的通用演算法在容器上。這種方法提高了靈活性並減少了程式碼重複。
-
包含:利用類別中的包含來強制執行特定的不變量或添加獨立於容器的新行為。
-
組合: 只要可行,就選擇組合而不是繼承。這提供了靈活性,並允許在衍生類別中包含更廣泛的行為。
以上是您應該子類化標準容器還是使用組合和演算法?的詳細內容。更多資訊請關注PHP中文網其他相關文章!