On peut rencontrer un scénario dans lequel supprimer une dépendance « ami » entre deux classes est souhaité, notamment en raison de préoccupations concernant une interdépendance excessive, des problèmes de maintenance et des normes UML obsolètes.
Extrayez les méthodes exposées par la classe "friend" et créez une nouvelle interface abstraite. Établissez une relation de dépendance de la classe « ami » vers l'interface et une dépendance « d'appel » de l'autre classe vers l'interface.
Déplacer les opérations qui constituent la dépendance "d'appel" de la classe dépendante à l'interface abstraite. Faites en sorte que l'interface étende un constructeur protégé à des fins d'héritage et masquez l'association de généralisation protégée entre la classe dépendante et l'interface.
Dans la dernière étape, créez une méthode dans la classe "friend" pour transmettre une référence de l'interface abstraite à la classe dépendante. Appelez cette méthode à partir de la classe dépendante lors de l'initialisation pour établir la connexion nécessaire. : interface interne protégée { publique: attachAccessor (ClassAAccessor & accesseur) { accessor.setInternalInterfaceRef(*this); } };
ClassAAccessor (ami) :class ClassAAccessor { publique: ClassAAccessor(ClassA& classA) : internalInterfaceRef(0) { classA.attachAccessor(*this); } privé: InternalInterface* internalInterfaceRef ; };
class ClassA : protected InternalInterface {
public:
attachAccessor(ClassAAccessor &accessor) {
accessor.setInternalInterfaceRef(*this);
}
};
Supprime les dépendances inutiles entre les classes
Conforme aux normes UML modernesclass ClassAAccessor {
public:
ClassAAccessor(ClassA& classA) : internalInterfaceRef(0) {
classA.attachAccessor(*this);
}
private:
InternalInterface* internalInterfaceRef;
};
LimitationsClause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.
Copyright© 2022 湘ICP备2022001581号-3