X
    Categories: Technik

Typische Entwurfsmuster in der Softwareentwicklung

In der Objektmodellierung dienen Entwurfsmuster dazu, dem Softwareentwickler Arbeit abzunehmen. Sie bieten bewährte Lösungen für Probleme, über die Softwareentwickler häufig stolpern. Da die Lösungswege sehr allgemein gehalten sind, lassen sich Entwurfsmuster auf fast alle Anwendungsbereiche übertragen. Man teilt Entwurfsmuster nach den Beziehungen, die sie beschreiben, in klassenbasierte und objektbasierte Muster ein. Eine weitere Klassifikation erfolgt nach ihrem Aufgabenbereich: man unterscheidet zwischen Erzeugungsmustern, Strukturmustern und Verhaltensmustern.

Fabrikmethode-Muster

Das Fabrikmethode-Muster (factory method) ist ein klassenbasiertes Erzeugungsmuster. Ein weitere Bezeichnung für das Muster ist „virtueller Konstruktor“. Beide Namen deuten auf die Aufgabe der Methode hin: Die Fabrikmethode ist für die „Fabrikation“ der Objekte verantwortlich. Die Besonderheit ist, dass die Unterklasse bestimmt, zu welcher Klasse das neue Objekt gehört. Die Fabrikmethode wird daher immer dann eingesetzt, wenn die Oberklasse im Voraus nicht weiß, welche Art von Objekten sie erzeugen soll oder wenn die Erzeugung der konkreten Objekte den Unterklassen überlassen werden soll. Die Unterklasse überschreibt dazu die Konstruktor-Funktion der abstrakten Oberklasse. Durch die Fabrikmethode wird es so umgangen, eigene anwendungsspezifische Klassen in den Programmcode eines Frameworks einbinden zu müssen.

Singleton-Muster

Das Singleton-Muster (singleton) ist ein objektbasiertes Erzeugungsmuster. Das Singleton-Muster garantiert, dass jede Klasse nur genau ein Objekt besitzt und ein globaler Zugriff auf dieses Objekt möglich ist. Die Singleton-Klasse verfügt über die Operation instance(), die als einzige auf das Objekt zugreifen kann und kontrolliert, dass nur eine Instanz existiert. Das Singleton-Muster stellt eine Verbesserung zur globalen Variablen dar, da eine Spezialisierung durch Unterklassen möglich ist. Nach Bedarf lässt sich die Klasse nachträglich so verändern, dass doch mehrere Exemplare möglich sind.

Kompositum-Muster

Das Kompositum-Muster (composite) ist ein objektbasiertes Strukturmuster. Das Kompositum-Muster erstellt sozusagen eine Komposition von Objekten: mehrere Objekte werden zu Baumstrukturen zusammengefasst. Dadurch können whole-part-Hierarchien repräsentiert werden. Diese Struktur macht es möglich, dass man auf einzelne Objekte ebenso wie auf einen ganzen Baum von Objekten zugreifen kann. Das Kompositum-Muster wird deswegen immer dann angewendet, wenn nicht zwischen elementaren und zusammengesetzten Objekten unterschieden werden soll. Der Anwender greift nur auf eine Schnittstelle zu; bei elementaren Objekten wird der Befehl direkt bearbeitet, bei zusammengesetzten Objekten wird der Befehl an die Teilobjekte weitergeleitet. Der große Vorteil liegt darin, dass der Zugriff dadurch, dass es nur eine Schnittstelle gibt, sehr einfach zu handhaben ist. Des Weiteren können neue Arten von Komponenten einfach eingefügt werden.

Proxy-Muster

Das Proxy-Muster (proxy) ist ein objektbasiertes Strukturmuster. Es wird auch als Surrogat bezeichnet. Beim Proxy-Muster erfolgt der Zugriff auf ein Objekt über einen Platzhalter. Es gibt verschiedene Anwendungsbereiche von Proxy-Mustern:

  • Das remote proxy ist ein lokaler Vertreter für ein Objekt auf einem anderen Computer. Es verbirgt den wahren Adressraum eines Objekts.
  • Das virtuelle Proxy dient der Optimierung. „Teure“ Objekte, wie speicherintensive Bilder und Videos, werden durch einen Platzhalter ersetzt und nur auf Verlangen ausgerufen.
  • Der Schutz-Proxy kontrolliert den Zugriff auf das Originalobjekt. Es ist möglich, beim Zugriff zusätzliche Verwaltungsaufgaben durchzuführen.
  • Die smart reference ist ein „intelligenterer“ Ersatz für einen einfachen Zeiger. Sie kann zusätzliche Aufgaben durchführen.

Allgemein gesagt ist es die Aufgabe des Proxy, als Vermittler Befehle an das echte Objekt weiterzuleiten.

Fassaden-Muster

Das Fassaden-Muster (facade) ist ein objektbasiertes Strukturmuster. Die Fassade ist eine einfache, abstrakte Schnittstelle, die auf eine Menge von Schnittstellen, ein Paket, zugreift. Sie dient zur Vereinfachung der Benutzung, da dem Client nur die Fassade und nicht die dahinterliegenden Klassen bekannt sein müssen. Im Bedarfsfall wäre es jedoch auch möglich, die Fassade zu umgehen und direkt auf die Klassen zuzugreifen. Fassaden-Muster werden immer dann verwendet, wenn eine einfache Schnittstelle zu einem komplexen Paket benötigt wird. Liegen zahlreiche Abhängigkeiten zwischen Client und Paket vor, dann macht eine Fassade als Vermittler zwischen Client und Paket die Arbeit übersichtlicher.

Beobachter-Muster

Das Beobachter-Muster (observer) ist ein objektbasiertes Verhaltensmuster. Das Beobachter-Muster überwacht Objekte und benachrichtigt sowie aktualisiert bei einer Änderung sofort alle abhängigen Objekte. Beobachter-Muster werden angewendet, wenn durch die Änderung eines Objektes eine im Voraus unbekannte Anzahl andere Objekte betroffen sind oder es sich um gekapselte Objekte handelt. Die Funktionsweise ist recht simpel: Wenn ein Objekt geändert wird, meldet es das an seine Beobachter, die daraufhin alle betroffenen Objekte aktualisieren.

Schablonenmethode-Muster

Das Schablonenmethode-Muster (template-method) ist ein objektbasiertes Verhaltensmuster. Es ist eine grundlegende Technik, die bei der Wiederverwendung von Code zu Tragen kommt, und stellt einen wichtigen Mechanismus für Klassenbibliotheken dar. Die Schablonenmethode legt in einer abstrakten Klasse den Rahmen eines Algorithmus fest. Sie bestimmt, welche Teile invariant sind und welche Teile variieren können – die genaue Ausformung der variierenden Teile wird den Unterklassen überlassen. Da das gemeinsame Verhalten aller Unterklasse in einer Oberklasse festgelegt werden kann, wird die Doppelung von Programmcode vermieden.