首頁 > 後端開發 > C++ > 如何在不影響設計的情況下刪除好友聲明?

如何在不影響設計的情況下刪除好友聲明?

Patricia Arquette
發布: 2024-11-04 13:20:30
原創
1025 人瀏覽過

How to Remove a Friend Declaration Without Compromising Design?

如何在保留設計的同時刪除好友宣告

在物件導向設計中使用「friend」關鍵字可以建立緊密的依賴關係並妨礙可維護性。本文提供了一種在保留系統整體設計的同時刪除友元聲明的綜合方法。

問題背景:

考慮一個場景,其中兩個類 ClassA 和ClassAAccessor,有朋友關係。 ClassA 表示具有受保護方法的共用資源,而 ClassAAccessor 則充當管理對此資源的存取的幫助程序。 ClassA 和 ClassAAccessor 之間的友元關係允許 ClassAAccessor 直接存取 ClassA 的受保護方法。

設計限制:

為了確保正確重構,設定了幾個限制:

  • ClassAAccessor 的公共介面應保持不變。
  • ClassA 的內部操作應保持私有。
  • 效能和記憶體消耗不應受到顯著影響。

重建步驟:

第1步:引入抽象介面

提取之前可以透過好友存取的操作關係到一個稱為InternalInterface 的單獨介面。重構ClassA和ClassAAccessor之間的關係,使其依賴該接口,而不是使用friend關鍵字。

第2步:將操作移至介面

將操作從A 類別到內部介面。這消除了從 ClassAAccessor 直接到 ClassA 的「呼叫」依賴。

第 3 步:黏合實作在一起

在 ClassAAccessor 建立一個指向下列實例的私有成員變數內部介面。在ClassA中引入一個方法,允許設定該成員變量,使得ClassAAccessor能夠存取所需的內部操作。

實作範例:

<code class="cpp">class ClassAAccessor {
public:
    ClassAAccessor(ClassA&amp; classA);
    void setInternalInterfaceRef(InternalInterface &amp; newValue) {
        internalInterfaceRef = &amp;newValue;
    }
private:  
    InternalInterface* internalInterfaceRef;
};

class ClassA : protected InternalInterface {
public:
    attachAccessor(ClassAAccessor &amp; accessor);
};</code>
登入後複製

的優點重建:

  • 消除ClassA 和ClassAAccessor 之間的緊密依賴。
  • 確保對 ClassA 內部操作的私有存取。
  • 提供更模組化和可維護的設計.

重構的缺點:

  • 增加了程式碼結構的複雜性。
  • 由於引入附加介面。
  • 對受保護的泛化關係的有限 UML 支援。

以上是如何在不影響設計的情況下刪除好友聲明?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板