デザインを維持しながら Friend 宣言を削除する方法
オブジェクト指向デザインで "friend" キーワードを使用すると、密接な依存関係が作成される可能性がありますそして保守性を妨げます。この記事では、システムの全体的な設計を維持しながらフレンド宣言を削除するための包括的なアプローチを提供します。
問題の背景:
2 つのクラス ClassA と ClassA が存在するシナリオを考えてみましょう。 ClassAAccessor はフレンド関係にあります。 ClassA は保護されたメソッドを持つ共有リソースを表し、ClassAAccessor はこのリソースへのアクセスを管理するヘルパーとして機能します。 ClassA と ClassAAccessor 間のフレンド関係により、ClassAAccessor は ClassA の保護されたメソッドに直接アクセスできます。
設計制約:
適切なリファクタリングを保証するために、いくつかの制約が設定されています。
リファクタリングの手順:
ステップ 1: 抽象インターフェイスの導入
以前にフレンド経由でアクセスできた操作を抽出する関係を InternalInterface という別のインターフェイスに変換します。 ClassA と ClassAAccessor の間の関係をリファクタリングして、friend キーワードを使用するのではなく、このインターフェイスに依存するようにします。
ステップ 2: 操作をインターフェイスに移動
操作を次から移動します。 ClassA を InternalInterface に設定します。これにより、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 中国語 Web サイトの他の関連記事を参照してください。