Composition/Aggregation Reuse Principle (CARP):
Verwenden Sie lieber Komposition/Aggregation statt Klassenvererbung.
Aggregation stellt eine schwache „Eigentumsbeziehung“ dar, was bedeutet, dass Objekt A Objekt B enthalten kann, Objekt B jedoch nicht Teil von Objekt A ist.
Die Synthese stellt eine starke „Eigentumsbeziehung“ dar, die eine strikte Beziehung zwischen Teilen und Ganzen widerspiegelt, und die Lebenszyklen von Teilen und Ganzen sind gleich.
Vorteile: Durch die Priorisierung der Zusammensetzung/Aggregation von Objekten können Sie jede Klasse gekapselt und auf eine einzelne Aufgabe konzentrieren. Auf diese Weise bleiben Klassen und Klassenvererbungshierarchien klein und es ist weniger wahrscheinlich, dass sie zu dem unkontrollierbaren Giganten heranwachsen, den die Vererbung verursachen kann.
Vererbung ist eine stark gekoppelte Struktur. Wenn sich die übergeordnete Klasse ändert, ändert sich auch die Unterklasse. Wenn Sie die Vererbung verwenden, denken Sie daran, sie zu verwenden, wenn es sich um eine „Ist-eine“-Beziehung handelt, und nicht, sie jederzeit zu verwenden.
Bridge-Modus (Bridge): Trennen Sie den abstrakten Teil von seinem Implementierungsteil, sodass sie sich unabhängig voneinander ändern können.
Implementierung bezieht sich auf die abstrakte Klasse und ihre abgeleiteten Klassen, die zum Implementieren ihrer eigenen Objekte verwendet werden.
Testfall:
[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; }
Musterimplementierung
[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(); } };
Zusammenfassung: Das Implementierungssystem kann aus mehreren Blickwinkeln klassifiziert werden, und jede Klassifizierung kann sich ändern. Trennen Sie diese dann mehrere Perspektiven, sodass sie sich unabhängig voneinander ändern und die Kopplung zwischen ihnen verringern können.
Das Obige ist der Inhalt der kurzen Einführung in das C++-Designmuster zum Bridge-Modus. Weitere verwandte Inhalte finden Sie auf der chinesischen PHP-Website (m.sbmmt.com)!