2 つのクラス間の「フレンド」依存関係を削除するシナリオに遭遇する可能性があります。特に過剰な相互依存性、メンテナンスの問題、古い UML 標準に関する懸念により、これが望まれます。
「フレンド」クラスによって公開されるメソッドを抽出し、新しい抽象インターフェイス。 「フレンド」クラスからインターフェイスへの依存関係を確立し、他のクラスからインターフェイスへの「呼び出し」依存関係を確立します。
操作を移動します。依存クラスから抽象インターフェイスへの「呼び出し」依存関係を構成します。インターフェイスが継承目的で保護されたコンストラクターを拡張し、依存クラスとインターフェイスの間の保護された汎化関連付けを非表示にします。
最後のステップでは、メソッドを作成します。 「friend」クラスで、抽象インターフェイスの参照を依存クラスに渡します。初期化中に依存クラスからこのメソッドを呼び出し、必要な接続を確立します。
ClassA (プロバイダー):
<code class="cpp">class ClassA : protected InternalInterface { public: attachAccessor(ClassAAccessor &accessor) { accessor.setInternalInterfaceRef(*this); } };</code>
ClassAAccessor (友人):
<code class="cpp">class ClassAAccessor { public: ClassAAccessor(ClassA& classA) : internalInterfaceRef(0) { classA.attachAccessor(*this); } private: InternalInterface* internalInterfaceRef; };</code>
以上が「フレンド」依存関係宣言をリファクタリングする方法: 過度の相互依存関係を削除するためのステップバイステップ ガイド?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。