• Keine Ergebnisse gefunden

Wahlpflichtfach Design Pattern

N/A
N/A
Protected

Academic year: 2021

Aktie "Wahlpflichtfach Design Pattern"

Copied!
12
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

FB Automatisierung und Informatik: Design Pattern 1

Dipl.-Inf., Dipl.-Ing. (FH) Michael Wilhelm

Hochschule Harz

FB Automatisierung und Informatik

miwilhelm@hs-harz.de

http://www.miwilhelm.de

Raum 2.202

Tel. 03943 / 659 338

Wahlpflichtfach Design Pattern

Inhalt

1. Einleitung 2. Singleton 3. Observer 4. Decorator 5. Abstract Factory 6. Adapter

7. Facade 8. Mediator 9. Bridge 10. MVWM

11. Java Collection Framework 12. Command / Befehl

(2)

FB Automatisierung und Informatik: Design Pattern 3

Target

+Methoden

Adapter

+Methoden

Adaptee

+Methoden

1: „Adapter“ mit Ableitung: EINE SEITE

Aggregation

Adapter-Pattern

Die Klasse Adapter wird von der Target-Klasse abgeleitet und hat damit Zugriff auf die „Problemklasse“.

Mittels einer Komposition hat man nun Zugriff auf die Transformation.

Einbau aller Methoden der Adapter-Klasse um die Adaptee-Methoden aufrufen zu können.

Zielklasse Fremdklasse *.jar Wrapperclass

Eigene Klasse Test

+Methoden

?

Adaptee muss flexibler sein

Entwurfsmuster: „Bridge“

• Im Adapter-Pattern hat man nur die eigene Klasse gekapselt.

• Möchte man nun die „fremde Instanz“ austauschen, benutzt man das Bridge-Pattern. Dort können Klassen à la Decorator hinzugefügt werden.

• Im Pattern Bridge werden beide also beide Seite gekapselt.

• Man ist dadurch etwas flexibler.

• Durch Angabe eines Parametersbei der Erzeugung einer Abstraktion kann die Implementierung gewählt werden (Fabrik).

• Bridge-Pattern

– Es existieren zwei Klassenfamilien:

• Abstrakte Klasse

• Abgeleitete Instanz (hat Instanz des Interfaces)

• Interface

• Instanz(en) mit Interface-Methoden

(3)

FB Automatisierung und Informatik: Design Pattern 5

Abstraktion Implementierer

Beispiele „Bridge“

Die Abstraktion (im Beispiel: List) definiert einerseits die Schnittstelle der Abstraktion, andererseits hält sie eine Referenz zu einem Implementierer.

Die SpezAbstraktion (im Beispiel: SortedList) erweitert die Schnittstelle.

Der Implementierer (im Beispiel: ListImpl) definiert die Schnittstelle der Implementierung. Er kann sich dabei von der Schnittstelle der Abstraktion erheblich unterscheiden.

Der KonkrImplementierer (im Beispiel: ArrayList) enthält eine konkrete Implementierung durch Implementierung der Schnittstelle.

https://de.wikipedia.org/wiki/Brücke_(Entwurfsmuster)

Entwurfsmuster: „Bridge“

Wann benutzen:

Eine Brücke findet Anwendung, wenn sowohl Abstraktion als auch Implementierung erweiterbar sein sollen und eine dauerhafte Verbindung zwischen Abstraktion und Implementierung verhindert werden soll.

Eine Änderungen der Implementierung ohne Auswirkungen für den Klienten sein sollen

• die Implementierung vor dem Klienten verborgen bleiben soll

• die Implementierung von verschiedenen Klassen gleichzeitig genutzt werden soll.

• In der Praxis kommt es oft vor, dass die Abstraktionsseite nicht so feingranular untergliedert wird wie die Implementierungs- seite. Man spricht von einer degenerierten Brücke.

(4)

FB Automatisierung und Informatik: Design Pattern 7

Entwurfsmuster: „Bridge“

• Erzeugt zwei unterschiedlicheKlassenhierarchien.

• Verhindert eine permanente Abhängigkeit.

• Die abstrakte Klasse und die Schnittstelle kann separat weiter entwickeltwerden.

• Die Implementation kann zur Laufzeit ausgewechseltwerden.

• Die abstrakte Klasse wird von Änderungen in der Schnittstelle nicht betroffen (Implementation).

• Nützlich bei mehrfachen Schnittstellen.

• Das Adapter-Patternhilft, dass zwei inkompatible Klassen zusammenzufügen.

• Das Bridge-Patternentkoppelt die Abstraktionund die Schnittstelle, indem es zwei hierarchische „Klassen“ erstellt.

Abstraktion

+Methoden

Bridge

+Methoden

Entwurfsmuster: „Bridge“

Komposition

Die abstrakte Klasse hat eine Komposition mit dem Interface.

Die konkreten „Schnittstellen“ implementieren UND erweitern die Schnittstelle.

Implementor

+Methoden

ConcreteImplementor1 - int Zusatzattribut + void aktion()

ConcreteImplementor2 + void aktion()

+ void moreAktion()

(5)

FB Automatisierung und Informatik: Design Pattern 9

Komposition

1: Beispiel

Vehicle

-IEngine eng +void drive()

SmallCar

+drive()

IEngine

+int go();

BigEngine +int go();

SmallEngine +int go();

BigBus

+drive()

• Das „Interface“ wird per Konstruktor gesetzt.

• Vertauschung ist möglich.

• Abhilfe der Vertauschung: Abstrakte Fabrik (Generator)

1. Beispiel:

http://www.avajava.com/tutorials/lessons/bridge-pattern.html?page=2 public abstract class Vehicle {

protected IEngine engine;

protected int weightInKilos;

public abstract void drive();

public void setEngine(IEngine engine) { this.engine = engine;

}

public void reportOnSpeed(int horsepower) { int ratio = weightInKilos / horsepower;

if (ratio < 3) {

syso("Könnte ein Veyron sein.");

} else if ((ratio >= 3) && (ratio < 8)) { syso("Jaguar, Ferrari oder AMG?");

} else {

syso("Citroen 2CV ?");

} }

(6)

FB Automatisierung und Informatik: Design Pattern 11

public class SmallCar extends Vehicle {

public SmallCar(IEngine engine) { this.weightInKilos = 600;

this.engine = engine;

}

@Override

public void drive() {

System.out.println("\nDas Auto fährt");

int horsepower = engine.go();

reportOnSpeed(horsepower);

} }

Linke Seite

public class BigBus extends Vehicle {

public BigBus(IEngine engine) { this.weightInKilos = 14000;

this.engine = engine;

}

@Override

public void drive(){

System.out.println("\nDer Bus fährt");

int horsepower = engine.go();

reportOnSpeed(horsepower);

} }

Linke Seite

(7)

FB Automatisierung und Informatik: Design Pattern 13

public interface IEngine { public int go();

}

public class BigEngineimplements IEngine { int horsepower;

public BigEngine() { horsepower = 900;

}

@Override public int go() {

System.out.println("\nDie \"big engine\" fährt");

return horsepower;

} }

Rechte Seite

public interface IEngine { public int go();

}

public class SmallEngineimplements IEngine { int horsepower;

public SmallEngine() { horsepower = 100;

}

@Override public int go() {

System.out.println("\nDie \“small engine\" fährt");

return horsepower;

} }

Rechte Seite

(8)

FB Automatisierung und Informatik: Design Pattern 15

public static void main(String[] args) {

Vehicle vehicle = new BigBus(new SmallEngine());

vehicle.drive();

vehicle.setEngine(new BigEngine());

vehicle.drive();

vehicle = new SmallCar(new SmallEngine());

vehicle.drive();

vehicle.setEngine(new BigEngine());

vehicle.drive();

}

2: Beispiel

Vehicle

Car Bike

ProductionCar AssembleCar ProductionBike AssembleBike Zusammenbau

Erzeugt Teile

Austausch der Produktion oder Austausch der Produktion oder Austausch der Produktion oder

Austausch der Produktion oder Assemble Assemble Assemble ?? Assemble ?? ?? ??

Zusammenbau Erzeugt Teile

(9)

FB Automatisierung und Informatik: Design Pattern 17

2: Beispiel

Vehicle

Car Bike

Production Assemble Workshop

Bridge Bridge Bridge Bridge

http://javapapers.com/design-patterns/bridge-design-pattern/

Komposition

2: Beispiel

Vehicle

-IWorkshop ws1 -IWorkshop ws2 +void manufacture ()

Car

+manufacture()

IWorkshop

+void work() ;

Assemble +int work();

Production +int work();

Bike

+manufacture()

(10)

FB Automatisierung und Informatik: Design Pattern 19

2: Beispiel

Komposition

3: Beispiel

abstract Printer

-IPrinting printer

#void callprint ()

APrinter

+callprint()

IPrinter

+void print() ;

HTMLPrinting +int print();

PlainTextPrinting +int print();

BPrinter

+callprint()

# abstract

(11)

FB Automatisierung und Informatik: Design Pattern 21

Komposition

4: Beispiel

abstract Export

-IExport export

#callsave (String, String, Arraylist)

IExport

+void clearString () +setCaption(String caption) +addString(String extrakaese) +print(String filename)

ExcelExport +void clearString () +setCaption(String caption) +addString(String extrakaese) +print(String filename)

MyExport

+callsave(…)

# abstract

PlainTextExport +void clearString () +setCaption(String caption) +addString(ExportItem) +print(String filename)

(12)

FB Automatisierung und Informatik: Design Pattern 23

private void test1() {

Export export; // abstrakte Klasse

IExport plainExport = new PlainTextExport(); // zwei „Exporte“

IExport excelExport = new ExcelExport();

export = new MyExport(plainExport);

ArrayList<ExportItem> liste = new ArrayList<ExportItem>();

liste.add( new ExportItem("Hamburg",1234567) );

liste.add( new ExportItem("Wernigerode",34667) );

liste.add( new ExportItem("Magdeburg",190567) );

export.callsave( "einwohner.txt", "Einwohner" , liste);

export.setImpl(excelExport);

export.callsave( "einwohner.xls", "Einwohner" , liste);

}

Referenzen

ÄHNLICHE DOKUMENTE

Architekturen verteilter Systeme: Client Server Systeme:

Architekturen verteilter Systeme: SiOitdAhitt(SOA)Service-OrientedArchitecture(SOA) EineUnterteilungder Applikation in einzelne, unabhängige Abläufe innerhalb

Transparenz lässt sich nicht immer (einfach) erreichen. - Beispiel:

- Viele gleichzeitige (“parallele”) Aktivitäten - Exakte globale Zeit nicht erfahrbar / vorhanden - Keine konsistente Sicht des Gesamtzustandes - Kooperation durch

Ziel: Verständnis der grundlegenden Phänomene, Kenntnis der geeigneten Konzepte und Verfahren.. Einige konzeptionelle Probleme und Phänomene verteilter Systeme. 1)

- Viele gleichzeitige (“parallele”) Aktivitäten - Exakte globale Zeit nicht erfahrbar / vorhanden - Keine konsistente Sicht des Gesamtzustandes - Kooperation durch

Das Deadlock-Problem Mit Also sprach Bellavista landete Luciano De Crescenco 1986 einen Bestseller. Seither kreisen seine Bücher stets um die gleichen Themen: Neapel, Liebe

- Mattern (bzw. Widmayer): Verteilte Algorithmen, 3st - Mobile Computing (geplant).. - Ubiquitous Computing