Frage

Kann man den Unterschied zwischen Fabrik und Strategiemuster erklären?

Für mich beide suchen gleichen andere als eine zusätzliche Fabrik-Klasse (die ein Objekt von Produkt in der Fabrik Muster erstellen)

War es hilfreich?

Lösung

Eine Fabrik Muster ist ein Erzeugungsmuster. Eine Strategie Muster ist ein Betriebsmuster. Anders ausgedrückt, wird eine Fabrik Muster verwendet, um Objekte eines bestimmten Typs zu erstellen. Eine Strategie ist Muster verwenden, eine Operation (oder eine Reihe von Operationen) in einer bestimmten Art und Weise durchzuführen. Im klassischen Beispiel könnte eine Fabrik erstellen verschiedene Arten von Tieren: Hund, Katze, Tiger, während ein Strategie-Muster bestimmte Aktionen durchführen würden, zum Beispiel, bewegen; Führen Sie verwenden, Gehen oder Lope Strategien.

In der Tat kann die beide zusammen verwendet werden. Zum Beispiel können Sie eine Fabrik haben, die Ihre Business-Objekte erstellt. Es können verschiedene Strategien zur Verwendung auf dem Persistenzmedium basiert. Wenn Ihre Daten lokal in XML gespeichert wäre es eine Strategie verwenden. Wenn die Daten in einer anderen Datenbank entfernt, wäre es eine ander verwenden.

Andere Tipps

Die Strategie Muster können Sie Änderungsverhalten einer Klasse polymorph.

Die Factory-Pattern können Ihnen Objekterstellung verkapseln.

Gary macht einen großen Punkt. Wenn Sie das Prinzip der verwenden zu codierenden Abstraktionen statt „concretions“ dann eine Menge der Muster beginnen, die wie Variationen über ein Thema.

Nur um hinzuzufügen, was tvanfosson sagte, schauen viele der Muster die gleiche wie weit die Umsetzung. Das heißt, viele haben Sie eine Schnittstelle schaffen, wo es vielleicht nicht ein, bevor im Code war, und dann eine Reihe von Implementierungen dieser Schnittstelle erstellen. Der Unterschied liegt in ihrem Zweck und wie sie verwendet werden.

  • Die Factory (Methode) Muster.

Erstellen Sie konkrete Beispiele nur. Verschiedene Argumente können in verschiedenen Objekten führen. Es hängt von der Logik usw.

  • Die Strategie-Muster.

kapseln den Algorithmus (Schritte), eine Aktion auszuführen. So können Sie die Strategie ändern und einen anderen Algorithmus verwenden.

Während beide wie sehr ähnlich aussehen, ist der Zweck nicht anders, ein Zweck ist die andere zu schaffen, ist eine Aktion auszuführen.

So. Wenn Ihre Fabrik Methode festgelegt ist, können Sie es so haben:

 public Command getCommand( int operatingSystem ) { 
      switch( operatingSystem ) { 
           case UNIX    :
           case LINUX   : return new UnixCommand();
           case WINDOWS : return new WindowsCommand();
           case OSX     : return new OSXCommand();
       }
  }

Aber nehmen wir Ihre Fabrik fortgeschritteneren oder dynamische Erstellung benötigt. Sie können eine Strategie zur Fabrik Methode hinzufügen und ändern, ohne neu kompilieren zu müssen, kann die Strategie zur Laufzeit geändert werden.

Zu allererst einen Unterschied zwischen einfachen Fabrik und abstrakten Werk vorgenommen werden müssen. Die erste ist eine einfache Fabrik, wo Sie nur eine Klasse haben, die für die Objekterstellung als Fabrik wirkt, während im letzteren Sie auf ein Werk Schnittstelle verbinden (die die Methodennamen definiert) und dann die verschiedenen Fabriken nennen, die diese Schnittstelle implementieren, die verschiedene Implementierungen des gleichen Verfahrens auf der Grundlage einiger Kriterien haben sollen. Zum Beispiel haben wir eine ButtonCreationFactory-Schnittstelle, die von zwei Fabriken umgesetzt wird, wobei die erste WindowsButtonCreationFactory (erstellte Tasten mit Windows-Look and Feel) und die zweite LinuxButtonCreationFactory (erzeugt Tasten mit Linux Look and Feel). So tun diese beiden Fabriken die gleiche Erstellungsmethode mit unterschiedlichen Implementierungen (Algorithmen) haben. Sie können auf der Grundlage der Methode, dies im laufenden Betrieb verweisen, die Sie von Taste eingeben, die Sie wollen.

Zum Beispiel, wenn Sie Tasten mit Linux Look and Feel:

ButtonCreationFactory myFactory = new LinuxButtonCreationFactory();
Button button1 = myFactory.createButton(...);

oder wenn Sie möchten, dass Windows-Tasten

ButtonCreationFactory myFactory = new WindowsButtonCreationFactory();
Button button1 = myFactory.createButton(...);

Genau in diesem Fall ergibt sich eine Art von Strategie-Muster, da es Algorithmen für tun einige Schöpfung unterscheidet. Er unterscheidet sich jedoch von ihm semantisch, weil es für die Objekterstellung verwendet wird, eher als Betriebsalgorithmen. Also, im Grunde mit abstraktem Werk haben Sie Objekterstellung mit verschiedenen Strategien, die es sehr ähnlich wie die Strategie Mustern machen. Allerdings ist der Abstrakte creational, während das Strategie-Muster in Betrieb ist. Die Umsetzung weise, sie führen die gleiche sein.

Factory (und FactoryMethod zurück von Factory) :

  1. Erzeugungsmuster
  2. Basierend auf Vererbung
  3. Fabrik gibt eine Factory-Methode (Schnittstelle), die wiederum Beton Object
  4. zurück
  5. Sie können neue Beton-Objekte für die Schnittstelle und Client (Anrufer) ersetzen sollte von allen konkreten Implementierungen nicht bewusst sein,
  6. Client immer Zugriff Schnittstelle nur und Sie können Objekterstellung Details in der Fabrik Methode
  7. verstecken

Haben Sie einen Blick auf diesem Wikipedia-Artikel und javarevisited Artikel

Strategie Muster:

  1. Es ist ein Verhaltensmuster
  2. Es basiert auf Delegation
  3. Es ändert sich Mut des Objekts durch Verfahren Verhalten modifiziert
  4. Es wird verwendet, zwischen Familie von Algorithmen zu wechseln
  5. Es ändert sich das Verhalten des Objekts zur Laufzeit

Beispiel:

Sie können Discount konfigurieren Strategie für ein bestimmtes Element (Flugkosten Ticket oder ShoppingCart Artikel). Dezember und kein Rabatt auf dem Artikel während Jaunary - - In diesem Beispiel werden Sie 25% Rabatt auf einen Artikel im Juli bieten. Juni

Related posts:

Real World Beispiel für die Strategie-Muster

Design Patterns: Factory-vs-Fabrik-Methode vs Abstract Factory

Strategiemuster in einfachen Worten sind mehr Laufzeit Erstellung des Verhaltens, wo man nicht mit der implementierenden Klasse betroffen ist. Laufzeit Schaffung konkreter Klasseninstanz auf der anderen Seite hatten Fabrik ist, und es ist an Ihnen, jedes Verhalten (Methode) von der implementierten Schnittstelle ausgesetzt zu verwenden.

Zur Erweiterung auf dem, was Oscar gesagt und in Bezug auf seinen Code:

Das GetCommand die Fabrik und die UnixCommand, WindowsCommand und OSXCommand Klassen sind Strategien

ich mit Oscar abschweifen kann, dass sein Beispiel einer Fabrik Umsetzung ist ziemlich eng gekoppelt und sehr geschlossen, kein Wunder, Ihre Wahl ist Strategie-Muster. Eine Fabrik Umsetzung sollte nicht auf einer festen Anzahl von bestimmten Klassen abhängen instanziiert wird, zum Beispiel:

public Command getCommand( int operatingSystem ) {        
   return commandTable.get(operatingSystem); 
}

...

public class WindowsCommand implements Command {
    ...
    static {
        CommandTable.getInstance().registerCommand(WIN_COMMAND_ID, new WindowsCommand());
    }

}

ich denke, die am besten geeigneten Kriterien zu wählen oder eine andere ist meist die Begriffe, die Sie beschäftigen, um Ihre Klassen und Methoden zu nennen, wir berücksichtigen sollten alle Schnittstellen zu programmieren neigen und nicht zu den Klassen und auch auf das Ziel konzentrieren: wir Ziel ist, um zu bestimmen, welcher Code zur Laufzeit ausgeführt wird. Das heißt, können wir das Ziel erreichen, indem jeder der beiden Muster verwendet wird.

Strategie und Fabrik sind verschiedene Zwecke. In Strategie haben Sie das Konzept definiert, dieses Muster verwenden, können Sie das Verhalten (Algorithmen) auszutauschen. Kommen zu der Fabrik gibt es viele Variationen um. Aber das ursprüngliche Muster von GO4 Staaten Fabrik verlässt Schaffung von Objekt zu untergeordneten Klasse. Hier mit der Fabrik Sie die vollständigen Instanz nicht das Verhalten ersetzen Sie daran interessiert sind. Damit werden Sie komplettes System zu ersetzen, nicht den Algorithmus.

Sie können den Unterschied einfach nicht verstehen, den Code oder Kategorisierung von suchen. Um zu begreifen, richtig das GoF-Muster, suchen ihre Absichten:

Strategie: „. Eine Familie von Algorithmen definieren, kapseln jeden, und machen sie austauschbar Strategie lässt den Algorithmus unabhängig von Kunden variieren, die es verwenden“

Werkstyp: „. Eine Schnittstelle definiert ein Objekt für die Erstellung, aber sie Subklassen entscheiden, welche Klasse instanziiert Factory Method läßt eine Klasse defer Instanziierung Unterklassen“

Und hier ist eine aufwendige Erklärung über die Absichten und die Unterschiede zwischen diesen beiden Muster: Unterschied zwischen Factory Method und Strategy Design Patterns

Werksmuster ist ein Erzeugungsmuster, die mit bestimmten Eigenschaften (Verhalten) erstellt wird. während der Laufzeit nach der Erstellung u ändern cn't es Eigenschaften (Verhalten). so, wenn u andere Eigenschaften müssen (Verhalten) u hat, das Objekt zu löschen und neues Objekt mit dem benötigten Eigenschaften (Verhalten) erstellen. das ist nicht gud. während im Falle der Strategie-Muster kann u die Eigenschaften (Verhalten) zur Laufzeit geändert werden.

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