So entfernen Sie eine Friend-Deklaration unter Beibehaltung des Designs
Die Verwendung des Schlüsselworts „friend“ im objektorientierten Design kann zu engen Abhängigkeiten führen und die Wartbarkeit behindern. Dieser Artikel bietet einen umfassenden Ansatz zum Entfernen einer Freunddeklaration unter Beibehaltung des Gesamtdesigns des Systems.
Problemhintergrund:
Stellen Sie sich ein Szenario vor, in dem zwei Klassen, ClassA und ClassAAccessor, habe eine Freundschaftsbeziehung. ClassA stellt eine gemeinsam genutzte Ressource mit geschützten Methoden dar, während ClassAAccessor als Hilfsmittel zur Verwaltung des Zugriffs auf diese Ressource dient. Die Freundschaftsbeziehung zwischen ClassA und ClassAAccessor ermöglicht ClassAAccessor den direkten Zugriff auf die geschützten Methoden von ClassA.
Designeinschränkungen:
Um ein ordnungsgemäßes Refactoring sicherzustellen, werden mehrere Einschränkungen festgelegt:
Refactoring-Schritte:
Schritt 1: Einführung einer abstrakten Schnittstelle
Extrahieren Sie die Vorgänge, die zuvor über den Freund zugänglich waren Beziehung in eine separate Schnittstelle namens InternalInterface. Refaktorieren Sie die Beziehung zwischen ClassA und ClassAAccessor, um sie von dieser Schnittstelle abhängig zu machen, anstatt das Schlüsselwort „friend“ zu verwenden.
Schritt 2: Vorgänge in die Schnittstelle verschieben
Verschieben Sie die Vorgänge von ClassA zum InternalInterface. Dadurch entfällt die „Aufruf“-Abhängigkeit von ClassAAccessor direkt zu ClassA.
Schritt 3: Implementierung zusammenfügen
Erstellen Sie eine private Mitgliedsvariable in ClassAAccessor, die auf eine Instanz von zeigt Interne Schnittstelle. Führen Sie eine Methode in ClassA ein, die das Festlegen dieser Mitgliedsvariablen ermöglicht, um ClassAAccessor den Zugriff auf die erforderlichen internen Vorgänge zu ermöglichen.
Implementierungsbeispiel:
<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>
Vorteile von Refactoring:
Nachteile von Refactoring:
Das obige ist der detaillierte Inhalt vonWie entferne ich eine Freundeserklärung, ohne das Design zu beeinträchtigen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!