Ich bin ziemlich neu zu diesem Muster ...Ist eine anonyme Funktion eine gute Möglichkeit, das Befehlsmuster zu implementieren?
Antwort
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.
Also ja, können Sie anonym (oder anders genannt) Funktionen verwenden, in dem Sie den Befehl Muster verwenden würden.
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).
Kannst du das genauer erklären? Welche Details können nicht gekapselt werden? – Iain
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).
Was ist der Unterschied zwischen einer Lambda und einer anonymen Funktion? – Iain
Sie sind Synonyme, denke ich. – alamar
Nein, es gibt kleine Unterschiede - http://blogs.msdn.com/ericlippert/archive/2007/01/10/lambda-expressions-vs-anonymous-methods-part-one.aspx –