Heim  >  Artikel  >  Backend-Entwicklung  >  Wie entferne ich eine Freundeserklärung, ohne das Design zu beeinträchtigen?

Wie entferne ich eine Freundeserklärung, ohne das Design zu beeinträchtigen?

Patricia Arquette
Patricia ArquetteOriginal
2024-11-04 13:20:30935Durchsuche

How to Remove a Friend Declaration Without Compromising Design?

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:

  • Die öffentliche Schnittstelle von ClassAAccessor sollte unverändert bleiben.
  • Interne Vorgänge von ClassA sollten privat bleiben.
  • Leistung und Speicherverbrauch sollten nicht wesentlich beeinträchtigt werden.

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&amp; classA);
    void setInternalInterfaceRef(InternalInterface &amp; newValue) {
        internalInterfaceRef = &amp;newValue;
    }
private:  
    InternalInterface* internalInterfaceRef;
};

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

Vorteile von Refactoring:

  • Beseitigt die enge Abhängigkeit zwischen ClassA und ClassAAccessor.
  • Gewährleistet privaten Zugriff auf interne Vorgänge von ClassA.
  • Bietet ein modulareres und wartbareres Design .

Nachteile von Refactoring:

  • Erhöhte Komplexität in der Codestruktur.
  • Potenzial für leicht erhöhten Speicherverbrauch aufgrund der Einführung zusätzlicher Schnittstellen.
  • Eingeschränkte UML-Unterstützung für geschützte Generalisierungsbeziehungen.

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn