• Keine Ergebnisse gefunden

• Auch bekannt als:

N/A
N/A
Protected

Academic year: 2022

Aktie "• Auch bekannt als:"

Copied!
10
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

Entwurfsmuster und Frameworks Zustand (State)

Tobias Rafreider Tobias.Rafreider@htwg-konstanz.de Hochschule Konstanz Technik, Wirtschaft und Gestaltung

University of Applied Sciences

(2)

Einordnung

• Klassifikation:

– Ein Objektbasiertes Verhaltensmuster

• Zweck:

– Ermögliche es einem Objekt sein Verhalten zu ändern, wenn sein interner Zustand sich ändert. Es wird so aussehen, als ob ein

Objekt seine Klasse gewechselt hat.

• Auch bekannt als:

– Objekte als Zustände

(3)

Motivation: Zustände von Dateien

• Die Klasse File verwaltet ein Zustandsobjekt von FileState

– Konkret: Ein Exemplar einer Unterklasse von FileState

• Ändert sich der Zustand der Verbindung, so ändert das

state.open();

(4)

Anwendbar wenn …

• das Verhalten eines Objekts von seinem Zustand abhängt.

– Zustand und damit das Verhalten ändert sich dynamisch zur Laufzeit.

• die Operationen einer Klasse große mehrteilige Bedingungsanweisungen enthalten.

– Es existiert eine Klassenvariable für den Zustand

– Methoden sind stark „verschachtelt“, d.h. es gibt viele IF-Anweisungen für die Zustände.

!Jeder Zweig der Bedingungsanweisung wird in eine separate Klasse ausgelagert.

(5)

Allgemeine Struktur

• Kontext

– Definiert die für den Klienten interessierende Schnittstelle – Verwaltet ein Exemplar eines konkreten Zustandsobjekts

• (Abstrakter) Zustand

– Definiert die Schnittstelle für die zu implementierenden Zustände – Default-Implementierungen sind möglich

• Konkrete Zustands-Unterklassen

(6)

Interaktionen

• Das Kontextobjekt delegiert zustandsspezifische Anfragen an das aktuelle konkrete Zustandsobjekt.

• Ein Kontext kann sich selbst als ein Argument an das bearbeitende Zustandsobjekt mitgeben

– Nötig, falls Zustandsobjekte das Kontextobjekt benötigen – Falls Operationen von Zustandsobjekten in neue Zustände

überführen.

• Das Kontextobjekt bietet die für den Klienten interessante Schnittstelle.

– Klienten können zu beginn das Kontextobjekt mit einem Zustand konfigurieren

– Direkter Zugriff auf die Zustandsobjekte nicht mehr nötig.

– Kontextobjekte können entscheiden, welche Zustände aufeinander

(7)

Konsequenzen

• Mit der Anzahl der Zustände wächst die Anzahl der Klassen linear, aber…

– alles in einer Klasse zu kodieren erfordert viele Kontrollstrukturen (z.B. für jeden Zustand einen IF-Block oder SWITCH-Block)

Code weniger explizit

Schwieriger zu verändern, zu warten und zu erweitern

(8)

Beispiel Code (1)

• Annahme

– Gehen Sie davon aus, dass im Folgenden die Implementier- ungen für die konkreten

Zustände bereits existieren.

! Implementierung des Zustands

„Closed“ nächste Folie.

public abstract class FileState {

public abstract void open(File context);

public abstract void close(File context);

public abstract void delete(File context);

} //Konkrete Klasse

public class File {

private FileState file_state = null;

private String filename = null;

public File(String filename){

this.filename = filename;

//setze Zustand auf closed

file_state = new ClosedState();

}

public void open(){

file_state.open(this);

}

public void close(){

file_state.close(this);

}

public void delete(){

file_state.delete(this);

}

public void setStatus(FileState state){

this.file_state = state;

} }

(9)

Beispiel Code (2)

public class ClosedState extends FileState {

@Override

public void close(File context) {

System.out.println("Schließen nicht möglich im Zustand 'schließen'");

}

@Override

public void delete(File context) {

context.setStatus(new DeletedState());

System.out.println("Datei im Zustand gelöscht");

}

@Override

public void open(File context) {

context.setStatus(new OpenState());

System.out.println("Datei im Zustand geöffnet");

Das Statusobjekt wir an dieser Stelle im Kontextobjekt ausgetauscht.

(10)

Abschließende Bewerkungen

• Bekannte Verwendung:

– TCP-Verbinungsprotokolle – Grafikprogramme

Paletten als Zustände

• Verwandt mit Fliegengewicht

– Falls die Zustandsobjekte gemeinsam genutzt werden

– Solche Fliegengewichte haben allerdings keinen intrinsischen Zustand.

Referenzen

ÄHNLICHE DOKUMENTE

Bei einer Mittelohr- schwerhörigkeit wird der Ton über die eigentlich lautere Luftleitung schlechter gehört, da er nicht von außen ans Innenohr weitergeleitet werden kann..

Auch Leber und Galle lassen sich durch das Salz stärken. Zudem ist es in der Lage, eitrige Prozesse zu lin- dern. Das Funktionsmittel regt Ent- giftungsorgane an und ist daher

Dabei sind die Probleme im K-Bereich lange bekannt: Die Kripo ist seit Jahren nicht nur personell gebeutelt und technisch unzureichend ausgestattet, sondern sie steht auch immer

Die Reaktionen zahlreicher Mitglieder in den letzten Tagen und Wochen haben gezeigt, dass unsere Kolleginnen und Kollegen sehr wohl den Ernst der Lage begrif- fen haben, sehr

Altmaier sagte, „wir sind entschlos- sen, den internationalen Terrorismus zu bekämpfen“. Für diese Aufgabe würden die Sicherheitsbehörden ent- sprechend gestärkt, kündigte er

Durch sozial- und gesellschaftspolitische Einflussnahme auf allen Ebenen sowie durch Aufklärung und Information der Öffentlichkeit, wirkt die LAG SELBSTHILFE NRW darauf hin, dass

zügigkeit, also das Recht, sich in der EU frei zu bewegen und im europäi- schen Ausland zu leben und zu arbei- ten, nicht mehr für die Briten gelten würde.. Auch das visumfreie

Andere Länder, zu- vörderst Pakistan, haben ihre Interes- sen neu kalkuliert und eine Kosten- Nutzen-Rechnungen über ihre in- ternationale Stellung angestellt, die, aus Anlass