Insgesamt beschäftigt sich diese Mustersprache mit einem Aspekt des C++-Designs: Insbesondere geht es um diesen Aspekt, der sich auf algebraische Typen konzentriert. C++ ist reich an Features, die algebraische Typen unterstützen, einschließlich Operatorüberlastung und einer guten Familie integrierter numerischer Typen. Die Idiome, die die algebraische Ansicht umgeben, sind stark genug, dass die Tradition in Bibliotheken für Zeichenfolgen und andere nicht-numerische Typen fortführt. Es gibt viele nicht numerische und, richtigerweise, nicht-algebraische Typen, auf die viele dieser Muster angewendet werden können. Wenn die Variationen der Buchstabenklasse weitgehend algorithmisch sind, insbesondere wenn die Letter-Klasse nur eine Memberfunktion enthält, verfeinern Sie dieses Muster mithilfe von Strategie. Daher wird das allgemeine Idiom für die Behandlung von Ereignissen: Primitive Typen bilden ein außergewöhnliches Untermuster, weil ihre Semantik aus Effizienzgründen in den Compiler integriert ist und ihre Semantik nicht so allgemein geändert werden kann wie die von benutzerdefinierten Typen. Eine Meinung, die ich einmal gehört habe und wirklich mochte (obwohl kann nicht für das Leben von mir erinnern die Quelle), ist, dass Idiome sind Dinge, die wahrscheinlich in Ihrer Sprache sein sollte oder es gibt eine Sprache, die sie hat. Umgekehrt sind es Tricks, die wir verwenden, weil unsere Sprache ihnen keinen direkten Primitiv bietet. Zum Beispiel gibt es kein Singleton in Java, aber wir können es imitieren, indem wir den Konstruktor ausblenden und eine getInstance-Methode anbieten. Verwenden Sie einfach die Umschlag/Brief-Musterstruktur.

Die Basisklasse ist ein Zwischenagent, der den entsprechenden abgeleiteten Typ aus dem Kontext auswählt. Der Begriff der Unterstützung mehrerer Implementierungen eines Objekts über seine gesamte Lebensdauer verallgemeinert sich zur Auswahl der geeigneten anfänglichen Implementierung, selbst in dem degenerierten Fall, dass sich die Körperinstanz während der Lebensdauer des Handle/Body-Paares nicht ändert. Zurück zu Perl, vielleicht das bekannteste Idiom ist die “Schwartzian Transform”, ein Ausdruck, der eine Sortierung von Daten in einer kompakten und effizienten Weise ausführt. Es ist nicht der offensichtlichste Weg, eine solche Operation durchzuführen, aber es ist kurz und diejenigen, die es vorher gesehen haben, wissen sofort, was sie tut. Sie haben eine Hierarchie von Klassen ( Algebraische Hierarchie ) erstellt, deren Objekte an binären Operationen teilnehmen sollen. Jede Klasse wird mithilfe des Bridge-Musters implementiert. Wie überwindet man den Overhead einer zusätzlichen Indirektionsebene, die beim Anwenden des “Gezählten Körpermusters” auf unveränderliche Klassen entsteht? Was ist der Unterschied zwischen Idiom und Design-Muster? Es scheint, dass sich diese Terminologien irgendwo überschneiden; wo genau, weiß ich nicht.