如何在保留設計的同時刪除好友宣告
在物件導向設計中使用「friend」關鍵字可以建立緊密的依賴關係並妨礙可維護性。本文提供了一種在保留系統整體設計的同時刪除友元聲明的綜合方法。
問題背景:
考慮一個場景,其中兩個類 ClassA 和ClassAAccessor,有朋友關係。 ClassA 表示具有受保護方法的共用資源,而 ClassAAccessor 則充當管理對此資源的存取的幫助程序。 ClassA 和 ClassAAccessor 之間的友元關係允許 ClassAAccessor 直接存取 ClassA 的受保護方法。
設計限制:
為了確保正確重構,設定了幾個限制:
重建步驟:
第1步:引入抽象介面
提取之前可以透過好友存取的操作關係到一個稱為InternalInterface 的單獨介面。重構ClassA和ClassAAccessor之間的關係,使其依賴該接口,而不是使用friend關鍵字。
第2步:將操作移至介面
將操作從A 類別到內部介面。這消除了從 ClassAAccessor 直接到 ClassA 的「呼叫」依賴。
第 3 步:黏合實作在一起
在 ClassAAccessor 建立一個指向下列實例的私有成員變數內部介面。在ClassA中引入一個方法,允許設定該成員變量,使得ClassAAccessor能夠存取所需的內部操作。
實作範例:
<code class="cpp">class ClassAAccessor { public: ClassAAccessor(ClassA& classA); void setInternalInterfaceRef(InternalInterface & newValue) { internalInterfaceRef = &newValue; } private: InternalInterface* internalInterfaceRef; }; class ClassA : protected InternalInterface { public: attachAccessor(ClassAAccessor & accessor); };</code>
的優點重建:
重構的缺點:
以上是如何在不影響設計的情況下刪除好友聲明?的詳細內容。更多資訊請關注PHP中文網其他相關文章!