模式:封裝類型 (Wrapper Type Pattern)
有時需要建立一個與現有類型行為相似但具有特定修改或限制的新類型。例如,您可能想建立一個行為類似於向量 (Vector) 但在插入後不允許修改元素的集合類型。封裝類型模式是實現這一目標的有效方法。
定義
封裝類型模式是一種設計模式,您建立一個新類型來「包裹」現有的類型。封裝類型與原始類型不同,但可以與之互相轉換。通常實作為只有一個欄位的位置結構體 (Positional struct)。
常見實踐
當目標是擴充現有類型的行為時,通常會為被封裝的類型提供存取器 (Accessors)。這允許用戶在需要時直接訪問底層類型。例如,提供 inner()、inner_mut() 和 into_inner() 方法。
優點
- 自定義函數: 允許為現有類型定義自定義函數。
- 強健的函數簽名: 將函數簽名限制在新類型上,使程式碼更強健。
- 提高可讀性: 通過提供更具描述性的類型名稱來提高可讀性。
缺點
- 冗贅: 實作起來可能比較冗長,特別是如果您想暴露被封裝類型的所有方法。
- 實作稀疏: 如果只是簡單地轉發呼叫,實作可能會非常精簡。
下一步
封裝類型模式非常有用,特別是與集合類型結合使用時。在下一節中,我們將介紹動態欄位 (Dynamic Fields) —— 這是一個重要的原語,它支持了動態集合 (Dynamic Collections)。