Man kann auf ein Szenario stoßen, in dem eine „Friend“-Abhängigkeit zwischen zwei Klassen entfernt wird erwünscht, insbesondere aufgrund von Bedenken hinsichtlich übermäßiger gegenseitiger Abhängigkeit, Wartungsproblemen und veralteten UML-Standards.
Extrahieren Sie die von der „Friend“-Klasse bereitgestellten Methoden und erstellen Sie eine neue abstrakte Schnittstelle. Stellen Sie eine Abhängigkeitsbeziehung von der „Friend“-Klasse zur Schnittstelle und eine „Call“-Abhängigkeit von der anderen Klasse zur Schnittstelle her.
Verschieben Sie die Operationen die die „Aufruf“-Abhängigkeit von der abhängigen Klasse zur abstrakten Schnittstelle bilden. Lassen Sie die Schnittstelle einen geschützten Konstruktor für Vererbungszwecke erweitern und verbergen Sie die geschützte Generalisierungszuordnung zwischen der abhängigen Klasse und der Schnittstelle.
Im letzten Schritt erstellen Sie eine Methode in der Klasse „Freund“, um eine Referenz der abstrakten Schnittstelle an die abhängige Klasse zu übergeben. Rufen Sie diese Methode während der Initialisierung aus der abhängigen Klasse auf, um die erforderliche Verbindung herzustellen.
ClassA (Anbieter):
class ClassA : protected InternalInterface {
public:
attachAccessor(ClassAAccessor &accessor) {
accessor.setInternalInterfaceRef(*this);
}
};
ClassAAccessor (Freund):
class ClassAAccessor {
public:
ClassAAccessor(ClassA& classA) : internalInterfaceRef(0) {
classA.attachAccessor(*this);
}
private:
InternalInterface* internalInterfaceRef;
};
Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.
Copyright© 2022 湘ICP备2022001581号-3