template-method-pattern

___ answer3079010 ___

Wie gesagt wurde, ist NVI eine Programmiersprache, die sich auf eine Kategorie von Sprachen bezieht. Es wurde unter anderem von Herb Sutter gefördert, weil es hilft, Verträge durchzusetzen:

  • Klasseninvarianten
  • function contracts (Behauptungen über die übergebenen Parameter und den erzeugten Rückgabewert)
  • sich wiederholende Operationen (wie Protokollierung)
  • Kontrolle über die erzeugten Ausnahmen (schlechte Idee;))

Die Implementierung kann jedoch tatsächlich erheblich abweichen. Ein anderes Beispiel für die NVI-Implementierung ist die Kombination mit Pimpl:

%Vor%

Und für die Implementierung:

%Vor%

Ich habe immer festgestellt, dass es den Punkt besser vermittelt hat. Hast du es herausgefunden?

Der Hauptpunkt ist, dass %code% ein Implementierungsdetail ist. Es ist eine schlechte Idee, Implementierungsdetails in der Schnittstelle offenzulegen, weil Sie sie möglicherweise ändern möchten.

Darüber hinaus neigen die Implementierungsdetails dazu, die Binärkompatibilität zu stören. Zum Beispiel kann das Hinzufügen einer neuen %code% -Methode in einer Klasse das Layout der virtuellen Tabelle (allgemeine Implementierungstechnik) ändern und somit die Binärkompatibilität verpfuschen. Auf gcc müssen Sie sicherstellen, dass Sie es zuletzt (unter den virtuellen) hinzufügen, wenn Sie die Kompatibilität beibehalten möchten.

Wenn Sie die obige Kombination aus NVI + Pimpl verwenden, gibt es in der exponierten Klasse überhaupt kein %code% (nicht einmal privat). Das Speicherlayout ist rückwärts und vorwärtskompatibel. Wir haben Binärkompatibilität erreicht.

Hier verwenden wir mehrere Muster gleichzeitig:

  • Vorlagenmethode
  • Strategie (da wir den Zeiger beliebig tauschen können)
  • Factory (um zu entscheiden, welche Implementierung wir bekommen)
___ tag123designpatterns ___ Ein Designmuster ist eine allgemeine wiederverwendbare Lösung für ein häufig auftretendes Problem im Softwaredesign. Verwenden Sie dieses Tag für Fragen, wenn Sie Probleme mit der Implementierung von Entwurfsmustern haben. Bitte verwenden Sie dieses Tag nicht bei Fragen zum Textmustervergleich. ___ qstnhdr ___ C ++: Unterschied zwischen NVI und Vorlagenmethodenmustern? ___ answer3078856 ___

NVI ist ein Idiom, Template-Methode ist ein Muster. NVI ist eine Implementierung des Vorlagenmethodenmusters unter Verwendung des dynamischen Versands in C ++; Es ist auch möglich, Vorlagen-Methoden in C ++ zu erstellen, indem die Metaprogrammierung der Vorlage verwendet wird, um den dynamischen Versand zu eliminieren.

Ein Muster ist allgemeiner als ein Idiom, und Sprachen können verschiedene Idiome verwenden, um das Muster zu implementieren.

    
___ tag123c ___ C ++ ist eine universelle Programmiersprache. Es wurde ursprünglich als Erweiterung von C entworfen und behält eine ähnliche Syntax, ist aber jetzt eine komplett andere Sprache. Verwenden Sie dieses Tag für Fragen zu Code, der mit einem C ++ - Compiler kompiliert werden soll. ___ tag123templatemethodemuster ___ Das Template Method-Muster ist ein Entwurfsmuster, das das Programmskelett eines Algorithmus in einer Methode definiert, die Vorlagenmethode genannt wird und einige Schritte an Unterklassen weiterleitet. Es ist eines der Verhaltensmuster der Gang of Four. ___ tag123nonvirtualinterface ___ Das nicht-virtuelle Interface-Muster ist die Verwendung einer abstrakten Basisklasse mit öffentlichen nicht-virtuellen Funktionen, die an (reine) virtuelle Funktionen delegieren, die von abgeleiteten Klassen überschrieben werden können. ___ qstntxt ___

Was ist der Unterschied zwischen NVI ( Nicht-virtuelle Schnittstelle ) und < a href="http://en.wikipedia.org/wiki/Template_method_pattern"> Vorlagenmethode Muster?

Sie scheinen mir sehr ähnlich zu sein und ich habe beide gelesen, dass sie im Grunde genommen die gleichen sind und dass sie sich subtil unterscheiden, da Template irgendwie allgemeiner ist.

    
___
2
Antworten

Template Methode und Strategie Design Patterns

Dies ist wahrscheinlich eine Neulingsfrage, da ich neu in Designmustern bin, aber ich habe mir die Template Method und Strategy DP's angesehen und sie scheinen sich sehr ähnlich zu sein. Ich kann die Definitionen lesen, die UMLs untersuchen und...
12.06.2009, 20:43
1
Antwort

typedef Vererbung aus einer reinen abstrakten Basis

Bearbeiten: duplizieren gefunden Ich habe einen Problemcode auf den einfachsten Arbeitsfall reduziert, um Folgendes zu illustrieren: mein typedef in einer reinen abstrakten Basisklasse wird nicht von der abgeleiteten Klasse geerbt. Im folge...
03.09.2010, 20:21
8
Antworten

Wo sollen wir Template Methode - Muster verwenden?

Kann mir jemand einige Beispielsituationen sagen, in denen Template Method - Muster verwendet werden sollten? Geben Sie mir aus Ihrer eigenen Erfahrung einen echten Nutzen. (Ich habe es bisher nur für das Mapping von Daten in der DA-Ebene...
12.10.2009, 10:40
2
Antworten

C ++: Unterschied zwischen NVI und Vorlagenmethodenmustern?

Was ist der Unterschied zwischen NVI ( Nicht-virtuelle Schnittstelle ) und < a href="http://en.wikipedia.org/wiki/Template_method_pattern"> Vorlagenmethode Muster? Sie scheinen mir sehr ähnlich zu sein und ich habe beide gelesen, dass sie im...
20.06.2010, 09:20