Ich versuche, eine Reihe von Klassen zu implementieren, die eine (gemeinsame) Schnittstelle zu dreieckigen oder symmetrischen Matrizen bieten, aber ich möchte das Kopieren von Speicher vermeiden Platz-Operationen).Verschiedene Schnittstellen für eine einzelne "Daten tragende" Klasse
Die Art, wie ich dies in C++ dachte, ist die Implementierung einer Klasse oder Struktur, die einfach ein Vektor ist, der die Matrixdaten enthält (da ich nur an Dreiecksmatrizen interessiert bin, muss ich nur die Hälfte der Matrix ca .). Nennen wir diese "Daten tragende" Klasse SquareTriangularMatrix
. Nun könnten die Daten innerhalb dieser Matrix unterschiedlich zugegriffen werden, abhängig davon, ob die Daten als oberes Dreieck, unteres Dreieck oder sogar als symmetrisch behandelt werden sollen.
Ich glaube nicht, dass Polymorphismus in meinem Fall angewandt werden kann, weil ich will, dass das gleiche Objekt von SquareTriangularMatrix
verschiedene Schnittstellen hat je nach Kontext. Einige Male SquareTriangularMatrix
könnte als eine untere Dreiecksmatrix behandelt werden, aber einige andere können sein transpose: eine obere Dreiecksmatrix, und so weiter.
Gibt es ein Entwurfsmuster, das dieses Problem anspricht? Jeder Hinweis oder Richtlinie in diesem Zusammenhang wäre sehr willkommen.
Vielen Dank
Nur ein paar Gedanken: Ich würde für die Zusammensetzung über Vererbung gehen. Wenn die verschiedenen Matrixtypen tatsächlich unterschiedliche Schnittstellen haben sollen, könnte das Aufrufen einer Basisklassenschnittstelle verwirrender als hilfreich sein. Auf der anderen Seite möchten Sie möglicherweise den gleichen Algorithmus mit verschiedenen Arten von Matrizen verwenden, was einfacher wäre, wenn sie dieselbe Schnittstelle teilen. – user463035818
Das klingt nach einem [Fliegengewicht] (https://sourcemaking.com/design_patterns/flyweight) für mich. – jaco0646