Frage

Ich bin sehr vertraut mit den Command-Mustern, aber ich verstehe noch nicht den Unterschied in der Theorie zwischen einem Functor und einem Befehl. Insbesondere denke ich an Java-Implementierungen. Beide sind im Grunde die Programmierung „Verben“ als Objekte dargestellt. Doch im Fall von functors, wie ich von einigen Beispielen anonyme innere Klasse Implementierungen gesehen haben scheinen üblich. Kann jemand da draußen diese schön für mich aufklären?

War es hilfreich?

Lösung

Ein Funktor ist ein ‚Syntax-Ebene‘ Konzept - es Pakete up-Code in einem Objekt, das syntaktisch wie ein Funktionszeiger behandelt werden kann - das heißt, es kann, indem Parameterliste in Klammern nach dem ‚aufgerufen‘ werden. In C ++ eine Klasse ein Funktor durch zwingende Betreiber machen könnte ().

Ein Befehl in dem Befehlsmuster ist ein Objekt, das eine ausführbare Funktionalität Pakete, aber es gibt keine Notwendigkeit für sie einen functor zu sein. Zum Beispiel könnte es sich um eine Klasse, die eine Schnittstelle ICommand implementiert, so dass seine Befehl durch den Aufruf Do () ausgeführt werden.

Andere Tipps

Ein Funktor ist eine Implementierung, eine Möglichkeit, ein Objekt verhält sich wie eine Funktion zu machen.

Das 'Command-Muster' ist ein Design-Muster.
Der Funktor ist eine Möglichkeit, das ‚Command-Muster‘.

zu implementieren

Hier kommt die Antwort von dem GOF :

  

Coplien beschreibt, wie zu implementieren   functors, Objekte, die Funktionen sind,   in C ++ [Cop92]. Er erreicht ein gewisses Maß   Transparenz bei ihrer Verwendung durch   Überlastung der Funktion Call-Betreiber   (Operator()). Das Command-Muster   anders; sein Fokus auf Aufrechterhaltung   eine Bindung zwischen einem Empfänger und einem   Funktion (das heißt, action), nicht nur    Aufrechterhaltung einer Funktion .

Aus der Beschreibung des Apache Commons Functor Seite:


A Funktors ist eine Funktion, die als ein Objekt manipuliert werden kann, oder ein Objekt eine einzelne generische Funktion darstellt.

Funktoren Unterstützung und eine Reihe von leistungsstarken Programmiertechniken fördern, einschließlich:

  • Programmierung in einem funktionalen Stil
  • Funktionen höherer Ordnung
  • interne Iteratoren
  • Wiederverwendung und Spezialisierung durch Komposition statt Vererbung und Überlastung
  • generic "Rückruf" oder "Erweiterungspunkt" APIs
  • generic "Filter" oder Prädikat APIs
  • viele "behavioral" Design Patterns, wie Besucher, Strategie, Zuständigkeitskette, etc.

Nach GOF (Gang of Four) zitierte Definition (von CompTrol), Functor und Befehl sind zwei verschiedene Muster.

Wie bereits erwähnt, stellt Functor eine Klasse eine Service-Methode enthält, mit anderen Worten: die Hauptverantwortung für die Funktor-Klasse ist die spezifische Logik in einem eigenen Verfahren implementiert zu speichern. Daher können wir bei dem Funktors denken, wie ein Container für sein eigenes innere Logik des Verfahrens. Historisch gesehen, Functor borns weil in der Java-Spezifikation ist nicht die Umsetzung vorlegen und / oder Begriff ‚Funktionszeiger‘, die im Rahmen der registrierten Rückrufe (spezifische Implementierung für die Beobachter-Muster) sehr nützlich sind.

Das Command-Muster stellt ein Design-Muster ein Invoker Unternehmen von einem Empfänger eines entkoppeln sollten. Es wird hauptsächlich verwendet, wenn es erforderlich ist, die Aktionen (Erzeugung der Ereignisse) von den Aktions Zuhörer decuple (man denke an GUIs). Es verfügt über eine Methode, die für die Excecution einer spezifischen Operation (in Abhängigkeit von der jeweiligen Befehl Implementierung von seiner eigenen übergeordneten Klasse) mit Bezug auf einen bestimmten Objekt Empfänger; in der angegebenen Definition kann die Ausführungsmethode als „nicht klug“ definiert werden, und zwar mit einer Smart-Implementierung selbst statt operative Logik zu implementieren sein, könnte es zu einer dritten Aufgabe delegieren. Wenn wir ein intelligenten Ausführungsverfahren haben, setzen wir einen Funktor, und wir setzen den Funktors (spezifische Befehl subpart Implementierung) im Zusammenhang mit den Befehlsmustern.

Ich hoffe, dass dies für Sie nützlich sein wird.

Ich denke an einen Funktor als Bestandteil des Befehlsmuster zu sein, die auch andere Infrastruktur wie den Aufrufer und Befehlsempfänger beinhaltet.

Das Befehlsmuster ist in Java verwendet, weil wir haben Verschlüsse in Java nicht. Functors ist ein Versuch, Schließungen zu implementieren.

Eine Sprache mit Verschlüssen muss nicht die Befehlsmuster.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top