Principe de réutilisation de la composition/agrégation (CARP) :
Préférez l'utilisation de la composition/agrégation au lieu de l'héritage de classe.
L'agrégation représente une "relation de propriété" faible, ce qui signifie que l'objet A peut contenir l'objet B, mais que l'objet B ne fait pas partie de l'objet A.
La synthèse représente une forte « relation de propriété », reflétant une relation stricte entre les parties et les touts, et les cycles de vie des parties et des touts sont les mêmes.
Avantages : donner la priorité à la composition/agrégation d'objets vous aidera à garder chaque classe encapsulée et concentrée sur une seule tâche. De cette façon, les classes et les hiérarchies d’héritage de classes restent petites et sont moins susceptibles de devenir le monstre incontrôlable que peut créer l’héritage.
L'héritage est une structure fortement couplée. Si la classe parent change, la sous-classe changera. Lorsque vous utilisez l’héritage, veillez à envisager de l’utiliser lorsqu’il s’agit d’une relation « est-une », plutôt que de l’utiliser à tout moment.
Mode Bridge (Bridge) : Séparez la partie abstraite de sa partie implémentation afin qu'elles puissent changer indépendamment.
L'implémentation fait référence à la classe abstraite et à ses classes dérivées utilisées pour implémenter leurs propres objets.
Cas de test :
[code]int main(){ ConerectImplementorA *A = new ConerectImplementorA; ConerectImplementorB *B = new ConerectImplementorB; Abstraction *abs = new Abstraction; abs->setImplementor(A); abs->Operation(); //Output: ConerectImplementorA. Abstraction *abs2 = new Abstraction; abs2->setImplementor(B); abs2->Operation(); //Output: ConerectImplementorB. return 0; }
Mise en œuvre du modèle
[code]//Implementor类,实现类 class Implementor{ public: virtual void Operator(){ } }; //具体实现类A class ConerectImplementorA: public Implementor{ virtual void Operator(){ std::cout << "ConerectImplementorA.\n"; } }; //具体实现类B class ConerectImplementorB: public Implementor{ virtual void Operator(){ std::cout << "ConerectImplementorB.\n"; } }; //抽象类->桥接Implementor类 class Abstraction{ protected: Implementor *imp; public: void setImplementor(Implementor *imp){ this->imp = imp; } virtual void Operation(){ imp->Operator(); } }; //被提炼的对象 class RefinedAbstraction: public Abstraction{ virtual void Operation()override{ imp->Operator(); } };
Résumé : Le système de mise en œuvre peut être classé sous plusieurs angles, et chaque classification peut changer, puis séparez-les plusieurs perspectives afin qu’elles puissent changer indépendamment et réduire le couplage entre elles.
Ce qui précède est une brève introduction au modèle de conception C et au modèle de pont. Pour plus de contenu connexe, veuillez faire attention au site Web PHP chinois (m.sbmmt.com) !