Strategie (Entwurfsmuster)

Strategie (Entwurfsmuster)

Die Strategie (engl. Strategy) ist ein Entwurfsmuster aus dem Bereich der Softwareentwicklung und gehört zu der Kategorie der Verhaltensmuster (Behavioural Patterns). Das Muster definiert eine Familie austauschbarer Algorithmen. Es ist eines der sogenannten GoF-Muster.

Inhaltsverzeichnis

Verwendung

Strategie-Objekte werden ähnlich wie Klassenbibliotheken verwendet. Im Gegensatz dazu handelt es sich jedoch nicht um externe Programmteile, die als ein Toolkit genutzt werden können, sondern um integrale Bestandteile des eigentlichen Programms, die deshalb als eigene Objekte definiert wurden, damit sie durch andere Algorithmen ausgetauscht werden können.

Meistens wird eine Strategie durch Klassen umgesetzt, die eine bestimmte Schnittstelle implementieren. In Sprachen wie Smalltalk, in denen auch der Programmcode selbst in Objekten abgelegt werden kann, kann eine Strategie aber auch durch solche Code-Objekte realisiert werden.

Die Verwendung von Strategien bietet sich an, wenn

  • viele verwandte Klassen sich nur in ihrem Verhalten unterscheiden.
  • unterschiedliche (austauschbare) Varianten eines Algorithmus benötigt werden.
  • Daten innerhalb eines Algorithmus vor Klienten verborgen werden sollen.
  • verschiedene Verhaltensweisen innerhalb einer Klasse fest integriert sind (meist über Mehrfachverzweigungen) aber
    • die verwendeten Algorithmen wiederverwendet werden sollen bzw.
    • die Klasse flexibler gestaltet werden soll.

UML-Diagramm

Strategie.png

Erklärung der Akteure

Die Klasse Strategie definiert nur eine Schnittstelle (Interface) für alle unterstützten Algorithmen. Die Implementierung der eigentlichen Algorithmen finden sich erst in den Ableitungen wieder (konkreteStrategie).

Der Kontext hält eine Member-Variable der Schnittstelle Strategie, die mit einer Referenz auf das gewünschte Strategieobjekt belegt ist. Auf diese Weise wird der konkrete Algorithmus über die Schnittstelle eingebunden und kann bei Bedarf selbst zur Laufzeit noch dynamisch gegen eine andere Implementierung ausgetauscht werden.

Vorteile

  • Es wird eine Familie von Algorithmen definiert.
  • Es wird die Auswahl aus verschiedenen Implementierungen ermöglicht und dadurch erhöhen sich die Flexibilität und die Wiederverwendbarkeit.
  • Es können Mehrfachverzweigungen vermieden werden und dies erhöht die Übersicht des Codes.
  • Strategien bieten eine Alternative zur Unterklassenbildung der Kontexte.

Nachteile

  • Klienten müssen die unterschiedlichen Strategien kennen, um zwischen ihnen auswählen und den Kontext initialisieren zu können.
  • Gegenüber der Implementierung der Algorithmen im Kontext entsteht hier ein zusätzlicher Kommunikationsaufwand zwischen Strategie und Kontext.
  • Die Anzahl von Objekten wird erhöht.

Beispiel

Als Beispiel kann ein Steuerberechnungsprogramm dienen, das die Berechnung von Steuersätzen möglichst in Strategie-Objekte auslagern sollte, um einfach länderabhängig konfigurierbar zu sein.

Ein anderes Beispiel wäre die Speicherung eines Dokuments oder einer Grafik in verschiedenen Dateiformaten.

Auch ein Packer, der verschiedene Kompressionsalgorithmen unterstützt, kann mit Hilfe von Strategie implementiert sein. Bei Java wird das Entwurfsmuster zum Beispiel zur Delegierung des Layouts von AWT-Komponenten an entsprechende LayoutManager (BorderLayout, FlowLayout etc.) verwendet.

Weitere Beispiele (außerhalb der OOP-Welt):

Code-Beispiele

Ruby

class Context
  def initialize(strategy)
    @strategy = strategy
  end
 
  def execute
    raise 'Strategie-Objekt antwortet nicht auf die execute-Methode' unless @strategy.respond_to?(:execute)
    @strategy.execute
  end
end
 
class StrategyA
  def execute
     puts 'Der normale Weg'
  end
end
 
class StrategyB
  def execute
     puts 'Ein anderer Weg'
  end
end
 
class StrategyC
  def execute
     puts 'Noch ein anderer Weg'
  end
end
 
a = Context.new(StrategyA.new)
a.execute
# Der normale Weg
 
b = Context.new(StrategyB.new)
b.execute
# Ein anderer Weg
 
c = Context.new(StrategyC.new)
c.execute
# Noch ein anderer Weg

Verwandte Entwurfsmuster


Wikimedia Foundation.

Игры ⚽ Нужно сделать НИР?

Schlagen Sie auch in anderen Wörterbüchern nach:

  • Strategie (Begriffsklärung) — Strategie steht für: Strategie (vom altgriechischen strategós, Feldherr, Kommandant), ein (im Gegensatz zur Taktik) längerfristig ausgerichtetes planvolles Anstreben einer vorteilhaften Lage oder eines Ziels Strategie (Militär) Strategie… …   Deutsch Wikipedia

  • Strategie — (vom altgriechischen strategós, Feldherr, Kommandant) ist ein längerfristig ausgerichtetes Anstreben eines Ziels unter Berücksichtigung der verfügbaren Mittel und Ressourcen. Folgende Artikel behandeln den Begriff im entsprechendem Zusammenhang:… …   Deutsch Wikipedia

  • Entwurfsmuster (Buch) — Entwurfsmuster. Elemente wiederverwendbarer objektorientierter Software, ISBN 3 8273 2199 9 (Originaltitel: Design Patterns. Elements of Reusable Object Oriented Software.) ist ein 1994 von Erich Gamma, Richard Helm, Ralph Johnson und John… …   Deutsch Wikipedia

  • Entwurfsmuster — (engl. design patterns) sind bewährte Lösungsschablonen für wiederkehrende Entwurfsprobleme in Softwarearchitektur und Softwareentwicklung. Sie stellen damit eine wiederverwendbare Vorlage zur Problemlösung dar, die in einem bestimmten… …   Deutsch Wikipedia

  • Beobachter (Entwurfsmuster) — Der Observer (Beobachter, Listener) ist ein Entwurfsmuster aus dem Bereich der Softwareentwicklung und gehört zu der Kategorie der Verhaltensmuster (Behavioural Patterns). Es dient zur Weitergabe von Änderungen an einem Objekt an von diesem… …   Deutsch Wikipedia

  • Proxy (Entwurfsmuster) — Der Proxy, auch Stellvertreter genannt, ist ein Entwurfsmuster aus dem Bereich der Softwareentwicklung und gehört zu der Kategorie der Strukturmuster (Structural Patterns). Das Muster dient zum Verschieben der Kontrolle über ein Objekt auf ein… …   Deutsch Wikipedia

  • Builder (Entwurfsmuster) — Der Erbauer (englisch Builder) ist ein Entwurfsmuster aus dem Bereich der Softwareentwicklung und gehört zur Kategorie der Erzeugungsmuster (Creational Patterns). Es trennt die Konstruktion komplexer Objekte von deren Repräsentationen, wodurch… …   Deutsch Wikipedia

  • Facade (Entwurfsmuster) — Fassade (engl. facade) ist ein Entwurfsmuster aus dem Bereich der Softwareentwicklung und gehört zu der Kategorie der Strukturmuster (Structural Patterns). Es bietet eine einheitliche und meist vereinfachte Schnittstelle zu einer Menge von… …   Deutsch Wikipedia

  • Prototype (Entwurfsmuster) — Ein Prototyp (engl. Prototype) ist ein Entwurfsmuster (design pattern) aus dem Bereich der Softwareentwicklung und gehört zur Kategorie der Erzeugungsmuster (Creational Patterns). Neue Instanzen werden aufgrund prototypischer Instanzen… …   Deutsch Wikipedia

  • Bridge (Entwurfsmuster) — Eine Brücke (engl. Bridge) ist in der Softwareentwicklung ein Entwurfsmuster und gehört zur Kategorie der Strukturmuster (Structural Patterns). Das Muster dient zur Trennung der Implementierung von ihrer Abstraktion (Schnittstelle), wodurch beide …   Deutsch Wikipedia

Share the article and excerpts

Direct link
Do a right-click on the link above
and select “Copy Link”