2009-06-15 5 views

Antwort

5

Wenn Sie Lambdas haben, brauchen Sie nicht wirklich die Hälfte der "Design" "Muster" insgesamt.

Fabrik? Das ist nur eine Funktion, die neue Objekte zurückgibt. Besucher? Duh! Befehl? Anonyme Funktion. Dolmetscher? Funktion, die String oder was auch immer nimmt. Strategie? Es ist eine Funktion!

Das sind nur Lambdas, Funktionen und Verschlüsse.

The problem is, about 1/3 to 1/2 of them were basically cover-ups for deficiencies in C++ that don't exist in other languages. Although I'm not a huge Perl fan anymore, I have to admit the Perl community caught on to this first (or at least funniest). They pointed out that many of these so-called patterns were actually an implementation of Functional Programming in C++.

Also ja, können Sie anonym (oder anders genannt) Funktionen verwenden, in dem Sie den Befehl Muster verwenden würden.

+0

Was ist der Unterschied zwischen einer Lambda und einer anonymen Funktion? – Iain

+0

Sie sind Synonyme, denke ich. – alamar

+0

Nein, es gibt kleine Unterschiede - http://blogs.msdn.com/ericlippert/archive/2007/01/10/lambda-expressions-vs-anonymous-methods-part-one.aspx –

0

Ich würde nein sagen, auf der Grundlage, dass eine Funktion die Details eines Befehls nicht wirklich einkapseln kann, und wenn es als anonym ist, wie können sowohl der Anrufer als auch der Angerufene verstehen, was es darstellt?

(Wenn man pedantisch sein wollte, beschreibt die GoF-Beschreibung des Copmmand-Musters spezifisch die Verwendung eines Objekts, um die Einbettung durchzuführen, was eine funktionsbasierte Implementierung vorbereitete, obwohl dies nick-picking wäre).

+0

Kannst du das genauer erklären? Welche Details können nicht gekapselt werden? – Iain

2

Wenn Ihr Befehl nur eine Operation unterstützt, können Sie eine anonyme Funktion verwenden.

Es ist jedoch nicht ungewöhnlich, dass für jeden Befehl mehr als eine Operation ausgeführt wird. Z.B. DoCommand/UndoCommand für Rückgängig/Redo-Behandlung. Oder CanExecuteCommand/ExecuteCommand zum Aktivieren/Deaktivieren von UI-Funktionen für den Befehl. Oder etwas wie GetLocalizedCommandName. Ich würde in diesen Fällen eine Schnittstelle verwenden (anstatt beispielsweise ein Tupel anonymer Funktionen).

Verwandte Themen