Professional Documents
Culture Documents
UMIT
Institute for Biomedical Engineering
Wintersemester 2006/07
Design Patterns - Grundlagen Anti Patterns Smalltalk Katalog der Patterns Creational Patterns Structural Patterns Behavioral Patterns Idiom Java - Allge
Inhaltsverzeichnis I
Dr. Bernhard Pfeifer Grundlagen der Programmierung WS 06/07 UMIT Institute for Biomedical Engineering
Design Patterns - Grundlagen Anti Patterns Smalltalk Katalog der Patterns Creational Patterns Structural Patterns Behavioral Patterns Idiom Java - Allge
Inhaltsverzeichnis II
Abstract Factory
Singleton
Prototype
6 Structural Patterns
Allgemeines
Adapter
Bridge
Composite
7 Behavioral Patterns
Allgemeines
Chain of Responsibility
Command
Iterator
Observer
Dr. Bernhard Pfeifer Grundlagen der Programmierung WS 06/07 UMIT Institute for Biomedical Engineering
Design Patterns - Grundlagen Anti Patterns Smalltalk Katalog der Patterns Creational Patterns Structural Patterns Behavioral Patterns Idiom Java - Allge
Inhaltsverzeichnis III
8 Idiom
Idiom in der Softwaretechnik
9 Java - Allgemein
Dr. Bernhard Pfeifer Grundlagen der Programmierung WS 06/07 UMIT Institute for Biomedical Engineering
Design Patterns - Grundlagen Anti Patterns Smalltalk Katalog der Patterns Creational Patterns Structural Patterns Behavioral Patterns Idiom Java - Allge
Allgemeines
Geschichte
Kent Beck und Ward Cunningham griffen 1987 die Ideen Alexanders aus
der Architektur auf und entwickelten Entwurfsmuster für die Erstellung von
grafischen Benutzungsschnittstellen in Smalltalk. Ein Jahr später begann
Erich Gamma [1] mit seiner Promotion an der Universität Zürich über die
generelle Übertragung dieser Methode auf die Softwareentwicklung.
Dr. Bernhard Pfeifer Grundlagen der Programmierung WS 06/07 UMIT Institute for Biomedical Engineering
Design Patterns - Grundlagen Anti Patterns Smalltalk Katalog der Patterns Creational Patterns Structural Patterns Behavioral Patterns Idiom Java - Allge
Einführung
Einführung
Dr. Bernhard Pfeifer Grundlagen der Programmierung WS 06/07 UMIT Institute for Biomedical Engineering
Design Patterns - Grundlagen Anti Patterns Smalltalk Katalog der Patterns Creational Patterns Structural Patterns Behavioral Patterns Idiom Java - Allge
Einführung
Einführung ...
Bei der Erstellung von Software sollte man auch ein Prinzip sehr
beherzigen:
Dr. Bernhard Pfeifer Grundlagen der Programmierung WS 06/07 UMIT Institute for Biomedical Engineering
Design Patterns - Grundlagen Anti Patterns Smalltalk Katalog der Patterns Creational Patterns Structural Patterns Behavioral Patterns Idiom Java - Allge
Einführung
Definition
Ein Pattern beschreibt ein Problem welches immer wieder auftritt und
definiert weiters den Kern der Lösung, damit dieses Muster zum Lösen des
Problems (immer und immer wieder) verwendet werden kann.
Ein gutes Muster sollte
1 ein oder mehrere Probleme lösen,
Dr. Bernhard Pfeifer Grundlagen der Programmierung WS 06/07 UMIT Institute for Biomedical Engineering
Design Patterns - Grundlagen Anti Patterns Smalltalk Katalog der Patterns Creational Patterns Structural Patterns Behavioral Patterns Idiom Java - Allge
Einführung
Dr. Bernhard Pfeifer Grundlagen der Programmierung WS 06/07 UMIT Institute for Biomedical Engineering
Design Patterns - Grundlagen Anti Patterns Smalltalk Katalog der Patterns Creational Patterns Structural Patterns Behavioral Patterns Idiom Java - Allge
1 Creational Patterns
2 Structural Patterns
3 Behavioral Patterns
Dr. Bernhard Pfeifer Grundlagen der Programmierung WS 06/07 UMIT Institute for Biomedical Engineering
Design Patterns - Grundlagen Anti Patterns Smalltalk Katalog der Patterns Creational Patterns Structural Patterns Behavioral Patterns Idiom Java - Allge
Dr. Bernhard Pfeifer Grundlagen der Programmierung WS 06/07 UMIT Institute for Biomedical Engineering
Design Patterns - Grundlagen Anti Patterns Smalltalk Katalog der Patterns Creational Patterns Structural Patterns Behavioral Patterns Idiom Java - Allge
Allgemeines
Dr. Bernhard Pfeifer Grundlagen der Programmierung WS 06/07 UMIT Institute for Biomedical Engineering
Design Patterns - Grundlagen Anti Patterns Smalltalk Katalog der Patterns Creational Patterns Structural Patterns Behavioral Patterns Idiom Java - Allge
Allgemeines
Geschichte
Die ersten Anti-Patterns wurden auf der Object Worls West 1996 von
Michael Akroyd in seinem Vortrag ”AntiPatterns: Vaccinations against
Software Misuse” vorgestellt.
Darin wurde besonders auf das Erkennen von gefährlichen
Softwarekonstrukten, die immer wieder auftreten, hingewiesen.
Anti Patterns gibt es in der IT im speziellen in den Bereichen
Softwareentwicklung, Softwarearchitekturen sowie Projekt- und
Konfigurationsmanagement.
Dr. Bernhard Pfeifer Grundlagen der Programmierung WS 06/07 UMIT Institute for Biomedical Engineering
Design Patterns - Grundlagen Anti Patterns Smalltalk Katalog der Patterns Creational Patterns Structural Patterns Behavioral Patterns Idiom Java - Allge
Beispiele
Beispiele
Dr. Bernhard Pfeifer Grundlagen der Programmierung WS 06/07 UMIT Institute for Biomedical Engineering
Design Patterns - Grundlagen Anti Patterns Smalltalk Katalog der Patterns Creational Patterns Structural Patterns Behavioral Patterns Idiom Java - Allge
Beispiele
Beispiele ...
Dr. Bernhard Pfeifer Grundlagen der Programmierung WS 06/07 UMIT Institute for Biomedical Engineering
Design Patterns - Grundlagen Anti Patterns Smalltalk Katalog der Patterns Creational Patterns Structural Patterns Behavioral Patterns Idiom Java - Allge
Beispiele
Beispiele ...
Dr. Bernhard Pfeifer Grundlagen der Programmierung WS 06/07 UMIT Institute for Biomedical Engineering
Design Patterns - Grundlagen Anti Patterns Smalltalk Katalog der Patterns Creational Patterns Structural Patterns Behavioral Patterns Idiom Java - Allge
Einführendes Beispiel
model Applikationsobjekt
view Bildschrimpräsentation
controller definiert den Weg, wie auf Benutzerinteraktionen reagiert
werden soll
Dr. Bernhard Pfeifer Grundlagen der Programmierung WS 06/07 UMIT Institute for Biomedical Engineering
Design Patterns - Grundlagen Anti Patterns Smalltalk Katalog der Patterns Creational Patterns Structural Patterns Behavioral Patterns Idiom Java - Allge
Ein großes Feature des MVC Patterns ist, dass verschiedenste Views
geschachtelt werden können.
Dr. Bernhard Pfeifer Grundlagen der Programmierung WS 06/07 UMIT Institute for Biomedical Engineering
Design Patterns - Grundlagen Anti Patterns Smalltalk Katalog der Patterns Creational Patterns Structural Patterns Behavioral Patterns Idiom Java - Allge
Katalog
Dr. Bernhard Pfeifer Grundlagen der Programmierung WS 06/07 UMIT Institute for Biomedical Engineering
Design Patterns - Grundlagen Anti Patterns Smalltalk Katalog der Patterns Creational Patterns Structural Patterns Behavioral Patterns Idiom Java - Allge
Katalog ...
Dr. Bernhard Pfeifer Grundlagen der Programmierung WS 06/07 UMIT Institute for Biomedical Engineering
Design Patterns - Grundlagen Anti Patterns Smalltalk Katalog der Patterns Creational Patterns Structural Patterns Behavioral Patterns Idiom Java - Allge
Katalog ...
Dr. Bernhard Pfeifer Grundlagen der Programmierung WS 06/07 UMIT Institute for Biomedical Engineering
Design Patterns - Grundlagen Anti Patterns Smalltalk Katalog der Patterns Creational Patterns Structural Patterns Behavioral Patterns Idiom Java - Allge
Katalog ...
Dr. Bernhard Pfeifer Grundlagen der Programmierung WS 06/07 UMIT Institute for Biomedical Engineering
Design Patterns - Grundlagen Anti Patterns Smalltalk Katalog der Patterns Creational Patterns Structural Patterns Behavioral Patterns Idiom Java - Allge
Katalog ...
Dr. Bernhard Pfeifer Grundlagen der Programmierung WS 06/07 UMIT Institute for Biomedical Engineering
Design Patterns - Grundlagen Anti Patterns Smalltalk Katalog der Patterns Creational Patterns Structural Patterns Behavioral Patterns Idiom Java - Allge
Katalog ...
Dr. Bernhard Pfeifer Grundlagen der Programmierung WS 06/07 UMIT Institute for Biomedical Engineering
Design Patterns - Grundlagen Anti Patterns Smalltalk Katalog der Patterns Creational Patterns Structural Patterns Behavioral Patterns Idiom Java - Allge
Allgemeines
Allgemeines
Dr. Bernhard Pfeifer Grundlagen der Programmierung WS 06/07 UMIT Institute for Biomedical Engineering
Design Patterns - Grundlagen Anti Patterns Smalltalk Katalog der Patterns Creational Patterns Structural Patterns Behavioral Patterns Idiom Java - Allge
Factory Pattern
Factory Pattern
Sei x die Oberklasse und xy und xz die abgeleiteten Klassen. Die Factory
ist nun eine Klasse, welche entscheidet, welche dieser Subklassen
zurückgegeben werden soll. Dazu werden die übergebenen Argumente
ausgewertet. Die Methode getClass () retourniert nun aufgrund des
Parameters abc eine Instanz der Klasse x.
Dr. Bernhard Pfeifer Grundlagen der Programmierung WS 06/07 UMIT Institute for Biomedical Engineering
Design Patterns - Grundlagen Anti Patterns Smalltalk Katalog der Patterns Creational Patterns Structural Patterns Behavioral Patterns Idiom Java - Allge
Factory Pattern
Nehmen wir an, wir haben eine Eingabeform, in welche man Vorname
Nachname als auch Nachname, Vorname eingeben kann. Man kann also
immer entscheiden, in welcher Reihenfolge die Namen eingegeben werden,
da diese in der Form Nachname, Vorname durch einen Beistrich getrennt
werden.
1 c l a s s Namer {
2 protected String l a s t ;
3 protected String f i r s t ;
4 public String getFirst () { return f i r s t ; }
5 public String getLast () { return l a s t ; }
6 }
Dr. Bernhard Pfeifer Grundlagen der Programmierung WS 06/07 UMIT Institute for Biomedical Engineering
Design Patterns - Grundlagen Anti Patterns Smalltalk Katalog der Patterns Creational Patterns Structural Patterns Behavioral Patterns Idiom Java - Allge
Factory Pattern
Nun erstellen wir zwei Klassen, die den Namen in zwei Teile zu splitten
imstande sind.
1 c l a s s F i r s t L a s t e x t e n d s Namer {
2 FirstLast ( String s ) {
3 int i = s . lastIndexOf (” ” );
4 i f ( i > 0) {
5 f i r s t = s . s ubs tr i ng (0 , i ) . trim ( ) ;
6 l a s t = s . s u b s t r i n g ( i +1). t r i m ( ) ;
7 } else {
8 f i r s t = ”” ;
9 l a s t name l a s t = s ;
10 }
11 }
12 }
Dr. Bernhard Pfeifer Grundlagen der Programmierung WS 06/07 UMIT Institute for Biomedical Engineering
Design Patterns - Grundlagen Anti Patterns Smalltalk Katalog der Patterns Creational Patterns Structural Patterns Behavioral Patterns Idiom Java - Allge
Factory Pattern
1 c l a s s L a s t F i r s t e x t e n d s Namer {
2 LastFirst ( String s ) {
3 i n t i = s . indexOf (” ,” ) ;
4 i f ( i > 0) {
5 l a s t = s . s ubs tr i ng (0 , i ) . trim ( ) ;
6 f i r s t = s . substring ( i + 1). trim ( ) ;
7 } else {
8 last = s ;
9 l a s t name f i r s t = ” ” ;
10 }
11 }
12 }
Dr. Bernhard Pfeifer Grundlagen der Programmierung WS 06/07 UMIT Institute for Biomedical Engineering
Design Patterns - Grundlagen Anti Patterns Smalltalk Katalog der Patterns Creational Patterns Structural Patterns Behavioral Patterns Idiom Java - Allge
Factory Pattern
Dr. Bernhard Pfeifer Grundlagen der Programmierung WS 06/07 UMIT Institute for Biomedical Engineering
Design Patterns - Grundlagen Anti Patterns Smalltalk Katalog der Patterns Creational Patterns Structural Patterns Behavioral Patterns Idiom Java - Allge
Factory Pattern
Factory Pattern
Dr. Bernhard Pfeifer Grundlagen der Programmierung WS 06/07 UMIT Institute for Biomedical Engineering
Design Patterns - Grundlagen Anti Patterns Smalltalk Katalog der Patterns Creational Patterns Structural Patterns Behavioral Patterns Idiom Java - Allge
Abstract Factory
Abstract Factory
Dr. Bernhard Pfeifer Grundlagen der Programmierung WS 06/07 UMIT Institute for Biomedical Engineering
Design Patterns - Grundlagen Anti Patterns Smalltalk Katalog der Patterns Creational Patterns Structural Patterns Behavioral Patterns Idiom Java - Allge
Singleton
Singleton
Dr. Bernhard Pfeifer Grundlagen der Programmierung WS 06/07 UMIT Institute for Biomedical Engineering
Design Patterns - Grundlagen Anti Patterns Smalltalk Katalog der Patterns Creational Patterns Structural Patterns Behavioral Patterns Idiom Java - Allge
Prototype
Prototype
Wenn die Erzeugung einer Instanz sehr zeitaufwändig ist, so kann das
Prototype Pattern verwendet werden.
Als Beispiel sei eine Datenbank gegeben, welche oftmals abgefragt werden
muss, um ein Antwortobjekt erzeugen zu können. Liegt die Antwort als
eine Tabelle bzw. ein ResultSet vor, so kann es vorkommen, dass man
dieses Objekt manipulieren möchte, um andere Fragestellungen ebenfalls
beantworten zu können.
Dr. Bernhard Pfeifer Grundlagen der Programmierung WS 06/07 UMIT Institute for Biomedical Engineering
Design Patterns - Grundlagen Anti Patterns Smalltalk Katalog der Patterns Creational Patterns Structural Patterns Behavioral Patterns Idiom Java - Allge
Prototype
Prototype Beispiel
Dr. Bernhard Pfeifer Grundlagen der Programmierung WS 06/07 UMIT Institute for Biomedical Engineering
Design Patterns - Grundlagen Anti Patterns Smalltalk Katalog der Patterns Creational Patterns Structural Patterns Behavioral Patterns Idiom Java - Allge
Prototype
Dr. Bernhard Pfeifer Grundlagen der Programmierung WS 06/07 UMIT Institute for Biomedical Engineering
Design Patterns - Grundlagen Anti Patterns Smalltalk Katalog der Patterns Creational Patterns Structural Patterns Behavioral Patterns Idiom Java - Allge
Prototype
Dr. Bernhard Pfeifer Grundlagen der Programmierung WS 06/07 UMIT Institute for Biomedical Engineering
Design Patterns - Grundlagen Anti Patterns Smalltalk Katalog der Patterns Creational Patterns Structural Patterns Behavioral Patterns Idiom Java - Allge
Prototype
Dr. Bernhard Pfeifer Grundlagen der Programmierung WS 06/07 UMIT Institute for Biomedical Engineering
Design Patterns - Grundlagen Anti Patterns Smalltalk Katalog der Patterns Creational Patterns Structural Patterns Behavioral Patterns Idiom Java - Allge
Prototype
1 p u b l i c c l a s s SwimData i m p l e m e n t s C l o n e a b l e {
2 V e c t o r swimmers ;
3 p u b l i c SwimData ( S t r i n g f i l e n a m e ) {
4 S t r i n g s = ” ” ; swimmers = new V e c t o r ( ) ;
5 I n p u t F i l e f = new I n p u t F i l e ( f i l e n a m e ) ; s= f . r e a d L i n e ( ) ;
6 w h i l e ( s != n u l l ) {
7 swimmers . a d d E l e m e n t ( new Swimmer ( s ) ) ;
8 s= f . r e a d L i n e ( ) ;
9 }
10 f . close ();
11 }
Dr. Bernhard Pfeifer Grundlagen der Programmierung WS 06/07 UMIT Institute for Biomedical Engineering
Design Patterns - Grundlagen Anti Patterns Smalltalk Katalog der Patterns Creational Patterns Structural Patterns Behavioral Patterns Idiom Java - Allge
Prototype
Aufgrund einer Aktion benötigt man die Daten nun in einer anderen
Sichtweise - das erneute Erstellen des Objektes dauert aber zu lange, daher
muss geklont werden:
1 s x d a t a = ( SwimData ) s d a t a . c l o n e ( ) ;
2 sxdata . sortByTime ( ) ;
3 c l o n e L i s t . removeAll ( ) ;
4 f o r ( i n t i =0; i < s x d a t a . s i z e ( ) ; i ++) {
5 sw = s x d a t a . getSwimmer ( i ) ;
6 c l o n e L i s t . a d d I t e m ( sw . getName ()+ ” ”+sw . getTime ( ) ) ;
7 }
Dr. Bernhard Pfeifer Grundlagen der Programmierung WS 06/07 UMIT Institute for Biomedical Engineering
Design Patterns - Grundlagen Anti Patterns Smalltalk Katalog der Patterns Creational Patterns Structural Patterns Behavioral Patterns Idiom Java - Allge
Allgemeines
Allgemeines
Dr. Bernhard Pfeifer Grundlagen der Programmierung WS 06/07 UMIT Institute for Biomedical Engineering
Design Patterns - Grundlagen Anti Patterns Smalltalk Katalog der Patterns Creational Patterns Structural Patterns Behavioral Patterns Idiom Java - Allge
Adapter
Adapter
Dr. Bernhard Pfeifer Grundlagen der Programmierung WS 06/07 UMIT Institute for Biomedical Engineering
Design Patterns - Grundlagen Anti Patterns Smalltalk Katalog der Patterns Creational Patterns Structural Patterns Behavioral Patterns Idiom Java - Allge
Adapter
Adapter Beispiel
Das Programm, in das wir eine fremde Klasse einbauen wollen, sei ein
Zeicheneditor. Dieser soll über die Möglichkeit verfügen, grafische Objekte wie
z.B. Linien zu erzeugen. Sämtliche grafischen Objekte erben ihre Schnittstelle
von einer abstrakten Klasse GrafischesObjekt. Zusätzlich möchten wir nun
auch Texte in unsere Grafiken einbauen. Hierfür soll eine bereits bestehende
Klasse TextAnzeige verwendet werden. Diese Klasse erzeugt jedoch Textobjekte
und ihre Schnittstelle ist inkompatibel mit unserer abstrakten Klasse
GrafischesObjekt. Somit benötigen wir einen Adapter, um die Schnittstelle
der Klasse TextAnzeige mit unserem Zeicheneditor kompatibel zu machen.
Dr. Bernhard Pfeifer Grundlagen der Programmierung WS 06/07 UMIT Institute for Biomedical Engineering
Design Patterns - Grundlagen Anti Patterns Smalltalk Katalog der Patterns Creational Patterns Structural Patterns Behavioral Patterns Idiom Java - Allge
Adapter
Die Adapterklasse nennen wir Text. Sie ist selbst eine Unterklasse von
GrafischesObjekt und erzeugt eine Instanz von TextAnzeige. Text
stellt das vom Editor geforderte Interface bereit und kann gleichwertig zu
anderen grafischen Objekten im Editor behandelt werden.
Dr. Bernhard Pfeifer Grundlagen der Programmierung WS 06/07 UMIT Institute for Biomedical Engineering
Design Patterns - Grundlagen Anti Patterns Smalltalk Katalog der Patterns Creational Patterns Structural Patterns Behavioral Patterns Idiom Java - Allge
Adapter
Adapter - Klassenadapter
Dr. Bernhard Pfeifer Grundlagen der Programmierung WS 06/07 UMIT Institute for Biomedical Engineering
Design Patterns - Grundlagen Anti Patterns Smalltalk Katalog der Patterns Creational Patterns Structural Patterns Behavioral Patterns Idiom Java - Allge
Adapter
Adapter - Objektadapter
Dr. Bernhard Pfeifer Grundlagen der Programmierung WS 06/07 UMIT Institute for Biomedical Engineering
Design Patterns - Grundlagen Anti Patterns Smalltalk Katalog der Patterns Creational Patterns Structural Patterns Behavioral Patterns Idiom Java - Allge
Adapter
Dr. Bernhard Pfeifer Grundlagen der Programmierung WS 06/07 UMIT Institute for Biomedical Engineering
Design Patterns - Grundlagen Anti Patterns Smalltalk Katalog der Patterns Creational Patterns Structural Patterns Behavioral Patterns Idiom Java - Allge
Adapter
Dr. Bernhard Pfeifer Grundlagen der Programmierung WS 06/07 UMIT Institute for Biomedical Engineering
Design Patterns - Grundlagen Anti Patterns Smalltalk Katalog der Patterns Creational Patterns Structural Patterns Behavioral Patterns Idiom Java - Allge
Adapter
1 c l a s s Text e x t e n d s G r a f i s c h e s O b j e k t {
2 p r i v a t e TextAnzeige textObjekt ;
3
4 p u b l i c Text ( ) {
5 t e x t O b j e k t = new T e x t A n z e i g e ( ) ;
6 }
7 p u b l i c v o i d rahmen ( ) {
8 // r u f t z . B . t e x t O b j e k t . g i b B r e i t e ( ) a u f
9 }
10 public void zeichne () {
11 // r u f t z . B . t e x t O b j e k t . z e i c h n e M i c h ( ) a u f
12 }
13 }
Dr. Bernhard Pfeifer Grundlagen der Programmierung WS 06/07 UMIT Institute for Biomedical Engineering
Design Patterns - Grundlagen Anti Patterns Smalltalk Katalog der Patterns Creational Patterns Structural Patterns Behavioral Patterns Idiom Java - Allge
Bridge
Bridge
Beispiel: Für die Entwicklung eines Editor werden eine Klasse Window
und diverse Subklassen wie IconWindow, DialogWindow usw. benötigt.
Dr. Bernhard Pfeifer Grundlagen der Programmierung WS 06/07 UMIT Institute for Biomedical Engineering
Design Patterns - Grundlagen Anti Patterns Smalltalk Katalog der Patterns Creational Patterns Structural Patterns Behavioral Patterns Idiom Java - Allge
Bridge
Bridge Beispiel
Bridge
Die Lösung für unser Beispiel stellt nun aber das Bridge Pattern bereit:
Trennung von Abstraktion und konkreter Umsetzung; d.h. Spaltung der
Klassen in verschiedene Hierarchien.
Dr. Bernhard Pfeifer Grundlagen der Programmierung WS 06/07 UMIT Institute for Biomedical Engineering
Design Patterns - Grundlagen Anti Patterns Smalltalk Katalog der Patterns Creational Patterns Structural Patterns Behavioral Patterns Idiom Java - Allge
Bridge
Kontext:
Dr. Bernhard Pfeifer Grundlagen der Programmierung WS 06/07 UMIT Institute for Biomedical Engineering
Design Patterns - Grundlagen Anti Patterns Smalltalk Katalog der Patterns Creational Patterns Structural Patterns Behavioral Patterns Idiom Java - Allge
Bridge
Bridge
Dr. Bernhard Pfeifer Grundlagen der Programmierung WS 06/07 UMIT Institute for Biomedical Engineering
Design Patterns - Grundlagen Anti Patterns Smalltalk Katalog der Patterns Creational Patterns Structural Patterns Behavioral Patterns Idiom Java - Allge
Composite
Composite
Dr. Bernhard Pfeifer Grundlagen der Programmierung WS 06/07 UMIT Institute for Biomedical Engineering
Design Patterns - Grundlagen Anti Patterns Smalltalk Katalog der Patterns Creational Patterns Structural Patterns Behavioral Patterns Idiom Java - Allge
Composite
Composite - Klassendiagramm
Dr. Bernhard Pfeifer Grundlagen der Programmierung WS 06/07 UMIT Institute for Biomedical Engineering
Design Patterns - Grundlagen Anti Patterns Smalltalk Katalog der Patterns Creational Patterns Structural Patterns Behavioral Patterns Idiom Java - Allge
Composite
Composite Beispiel
Dr. Bernhard Pfeifer Grundlagen der Programmierung WS 06/07 UMIT Institute for Biomedical Engineering
Design Patterns - Grundlagen Anti Patterns Smalltalk Katalog der Patterns Creational Patterns Structural Patterns Behavioral Patterns Idiom Java - Allge
Composite
Composite Beispiel
1 p u b l i c c l a s s F l o u r implements I n g r e d i e n t {
2 public float getPrice () {
3 return (0.59 f );
4 }
5 }
6
7 ...
8
9 p u b l i c c l a s s Cake e x t e n d s C o m p o s i t e I n g r e d i e n t {
10 p u b l i c Cake ( ) {
11 t h i s . a d d I n g r e d i e n t ( new Dough ( ) ) ;
12 }
13 }
14
15 ....
Dr. Bernhard Pfeifer Grundlagen der Programmierung WS 06/07 UMIT Institute for Biomedical Engineering
Design Patterns - Grundlagen Anti Patterns Smalltalk Katalog der Patterns Creational Patterns Structural Patterns Behavioral Patterns Idiom Java - Allge
Composite
Composite
Dr. Bernhard Pfeifer Grundlagen der Programmierung WS 06/07 UMIT Institute for Biomedical Engineering
Design Patterns - Grundlagen Anti Patterns Smalltalk Katalog der Patterns Creational Patterns Structural Patterns Behavioral Patterns Idiom Java - Allge
Allgemeines
Allgemeines
Dr. Bernhard Pfeifer Grundlagen der Programmierung WS 06/07 UMIT Institute for Biomedical Engineering
Design Patterns - Grundlagen Anti Patterns Smalltalk Katalog der Patterns Creational Patterns Structural Patterns Behavioral Patterns Idiom Java - Allge
Chain of Responsibility
Chain of Responsibility
Entkoppelt die Anforderung des Senders vom Empfänger. Basierend auf
den gesendeten Daten wird ein Empfänger - datengetrieben - ausgewählt.
1 p u b l i c c l a s s Matter {
2 private int size ;
3 private int quantity ;
4
5 public int getSize () {
6 return size ;
7 }
8
9 public void s e t S i z e ( int s i z e ) {
10 this . size = size ;
11 }
12
13 public int getQuantity () {
14 return quantity ;
15 }
16
17 public void setQuantity ( int quantity ) {
18 this . quantity = quantity ;
19 }
20 }
21
22
23 p u b l i c c l a s s S i l l {
24 // E v e r y t h i n g i s c o l l e c t e d h e r e .
25 p u b l i c void c o l l e c t ( Matter g r a v e l ) { . . .
26 }
27 }
Dr. Bernhard Pfeifer Grundlagen der Programmierung WS 06/07 UMIT Institute for Biomedical Engineering
Design Patterns - Grundlagen Anti Patterns Smalltalk Katalog der Patterns Creational Patterns Structural Patterns Behavioral Patterns Idiom Java - Allge
Chain of Responsibility
Chain of Responsibility
Entkoppelt die Anforderung des Senders vom Empfänger. Basierend auf
den gesendeten Daten wird ein Empfänger - datengetrieben - ausgewählt.
1 p u b l i c c l a s s F i l t e r 1 extends Sill {
2 private int size ;
3
4 public Filter1 ( int size ) {
5 this . size = size ;
6 }
7
8 p u b l i c void c o l l e c t ( Matter g r a v e l ) {
9 f o r ( i n t i = 0 ; i < g r a v e l . g e t Q u a n t i t y ( ) ; i ++) {
10 i f ( gravel . getSize () < size ) {
11 super . c o l l e c t ( g r a v e l ) ;
12 } else {
13 // c o l l e c t h e r e . t h a t means , o n l y m a t t e r w i t h l e s s
14 // s i z e w i l l p a s s . . .
15 }
16 }
17 }
18 }
Dr. Bernhard Pfeifer Grundlagen der Programmierung WS 06/07 UMIT Institute for Biomedical Engineering
Design Patterns - Grundlagen Anti Patterns Smalltalk Katalog der Patterns Creational Patterns Structural Patterns Behavioral Patterns Idiom Java - Allge
Command
Command
Der Klient ruft ein spezielles Modul durch Benutzung eines Kommandos.
Der Klient übergibt dabei die Anfrage (Request), und dieser request wird
als Kommando weitergegeben. Dieser Kommando-Request wird auf die
benötigten Module gemappt und entsprechend ausgewertet.
Ein klassisches Beispiel ist ein Restaurant. Ein Kunde geht in das
Restaurant und bestellt sich etwas zu essen. Die Bedienung nimmt die
Bestellung entgegen (=Kommando) und übergibt die Aufgabe dem Koch
in der Küche. Der Koch wiederum kocht das Menü (bzw. die Menüs) und
übergibt die fertigen Gerichte dem Kellner, der dies dem Kunden
weiterreicht.
Dr. Bernhard Pfeifer Grundlagen der Programmierung WS 06/07 UMIT Institute for Biomedical Engineering
Design Patterns - Grundlagen Anti Patterns Smalltalk Katalog der Patterns Creational Patterns Structural Patterns Behavioral Patterns Idiom Java - Allge
Command
Command Beispiel
1 p u b l i c c l a s s Order {
2 p r i v a t e S t r i n g command ;
3
4 p u b l i c O r d e r ( S t r i n g command ) {
5 t h i s . command = command ;
6 }
7 }
8
9 p u b l i c c l a s s Waiter {
10 p u b l i c Food t a k e O r d e r ( Customer c u s t , O r d e r o r d e r ) {
11 Cook cook = new Cook ( ) ;
12 Food f o o d = cook . p r e p a r e O r d e r ( o r d e r , t h i s ) ;
13 return food ;
14 }
15 }
16
17 p u b l i c c l a s s Cook {
18 p u b l i c Food p r e p a r e O r d e r ( O r d e r o r d e r , W a i t e r w a i t e r ) {
19 Food f o o d = ge tCo okedFood ( o r d e r ) ;
20 return food ;
21 }
22
23 p u b l i c Food getCook edFo od ( O r d e r o r d e r ) {
24 Food f o o d = new Food ( o r d e r ) ;
25 return food ;
26 }
27 }
Dr. Bernhard Pfeifer Grundlagen der Programmierung WS 06/07 UMIT Institute for Biomedical Engineering
Design Patterns - Grundlagen Anti Patterns Smalltalk Katalog der Patterns Creational Patterns Structural Patterns Behavioral Patterns Idiom Java - Allge
Iterator
Iterator
Dr. Bernhard Pfeifer Grundlagen der Programmierung WS 06/07 UMIT Institute for Biomedical Engineering
Design Patterns - Grundlagen Anti Patterns Smalltalk Katalog der Patterns Creational Patterns Structural Patterns Behavioral Patterns Idiom Java - Allge
Iterator
Iterator Beispiel
Wir wollen hier eine Fernbedienung realisieren - klassiches Channelhopping!
1 public interface Iterator {
2 p u b l i c Channel nextChannel ( i n t c u r r e n t C h a n n e l ) ;
3 p u b l i c Channel prevChannel ( i n t c u r r e n t C h a n n e l ) ;
4 }
5
6 p u b l i c C h a n n e l S u r f e r implements I t e r a t o r {
7 p u b l i c Channel nextChannel ( i n t c u r r e n t C h a n n e l ) {
8 C h a n n e l c h a n n e l = new C h a n n e l ( c u r r e n t C h a n n e l +1);
9 return channel ;
10 }
11
12 p u b l i c Channel prevChannel ( i n t c u r r e n t C h a n n e l ) {
13 C h a n n e l c h a n n e l = new C h a n n e l ( c u r r e n t C h a n n e l −1);
14 return channel ;
15 }
16 }
17
18 p u b l i c c l a s s R e m o t e C o n t r o l {
19 private ChannelSurfer s u r f e r ;
20 private Settings settings ;
21
22 p u b l i c RemoteControl ( ) {
23 s u r f e r = new C h a n n e l S u r f e r ( ) ;
24 s e t t i n g s = new S e t t i n g s ( ) ;
25 }
26
27 p u b l i c getProgram ( C h a n n e l S u r f e r s u r f e r ) {
28 r e t u r n new Program ( s u r f e r . n e x t C h a n n e l ( ) ) ;
29 }
30 }
Dr. Bernhard Pfeifer Grundlagen der Programmierung WS 06/07 UMIT Institute for Biomedical Engineering
Design Patterns - Grundlagen Anti Patterns Smalltalk Katalog der Patterns Creational Patterns Structural Patterns Behavioral Patterns Idiom Java - Allge
Iterator
Dr. Bernhard Pfeifer Grundlagen der Programmierung WS 06/07 UMIT Institute for Biomedical Engineering
Design Patterns - Grundlagen Anti Patterns Smalltalk Katalog der Patterns Creational Patterns Structural Patterns Behavioral Patterns Idiom Java - Allge
Observer
Observer
Dr. Bernhard Pfeifer Grundlagen der Programmierung WS 06/07 UMIT Institute for Biomedical Engineering
Design Patterns - Grundlagen Anti Patterns Smalltalk Katalog der Patterns Creational Patterns Structural Patterns Behavioral Patterns Idiom Java - Allge
Observer
Observer
Dr. Bernhard Pfeifer Grundlagen der Programmierung WS 06/07 UMIT Institute for Biomedical Engineering
Design Patterns - Grundlagen Anti Patterns Smalltalk Katalog der Patterns Creational Patterns Structural Patterns Behavioral Patterns Idiom Java - Allge
Observer
Observer Beispiel
Die Darstellung einer Zahlenmenge kann man auf viele Arten und Weisen
realisieren.
Werden jetzt die Daten in der Datenbank aber geändert (b = 10), sollen
alle Ansichten natürlich auch die neuen Daten wiedergeben. Dazu werden
die Ansichtsobjekte (Beobachter) vom Datenobjekt (Subjekt)
benachrichtigt (notify), das sich etwas an den Daten geändert hat.
Dr. Bernhard Pfeifer Grundlagen der Programmierung WS 06/07 UMIT Institute for Biomedical Engineering
Design Patterns - Grundlagen Anti Patterns Smalltalk Katalog der Patterns Creational Patterns Structural Patterns Behavioral Patterns Idiom Java - Allge
Observer
Dr. Bernhard Pfeifer Grundlagen der Programmierung WS 06/07 UMIT Institute for Biomedical Engineering
Design Patterns - Grundlagen Anti Patterns Smalltalk Katalog der Patterns Creational Patterns Structural Patterns Behavioral Patterns Idiom Java - Allge
Observer
Observer Struktur
Das Subjekt kennt seine Beobachter nicht, sondern bietet den Beobachtern lediglich eine
Schnittstelle zum An- und Abmelden. Es können beliebig viele Objekte ein Subjekt beobachten.
Der Beobachter stellt eine Schnittstelle zur Verfügung, die aufgerufen wird, wenn das Subjekt
aktualisiert worden ist.
Das Konkrete-Subjekt speichert den Zustand und benachrichtigt seine Beobachter, falls sich der
Zustand geändert hat.
Der Konkrete-Beobachter implementiert die Aktualisierungsschnittstelle der Beobachterklasse, um
den gespeicherten Zustand konsistent zum Zustand des Subjektes zu halten. Dazu wird der
momentane Zustand und eine Referenz auf das Subjekt gespeichert.
Dr. Bernhard Pfeifer Grundlagen der Programmierung WS 06/07 UMIT Institute for Biomedical Engineering
Design Patterns - Grundlagen Anti Patterns Smalltalk Katalog der Patterns Creational Patterns Structural Patterns Behavioral Patterns Idiom Java - Allge
Observer
Observer Vorteile
Subjekt und Beobachter können unabhängig voneinander definiert, geändert und
wiederverwendet werden. Man kann neue Beobachter, bzw. neue Subjekte hinzufügen ohne
diese abändern zu müssen. Außerdem können beliebig viele Beobachter demselben Subjekt
zugeordnet werden.
Subjekt und Beobachterklassen sind nicht eng aneinander gekoppelt. Deswegen ist es
möglich, dass sie zu unterschiedlichen Abstraktionsschichten gehören können. Befindet sich
z.B. der Beobachter in einer höher liegenden Schicht als das Subjekt so ist es trotzdem
möglich, dass das Subjekt den Beobachter informiert. Dabei werden die Schichten nicht
verletzt.
Eine von einem Subjekt gesendete Nachricht muss ihre Empfänger nicht weiter spezifizieren.
Die Nachricht wird automatisch an alle die Objekte weitergeleitet, die sich für sie registriert
haben. Das Subjekt beachtet nicht, wie viele interessierte Objekte es gibt. Dadurch wird es
möglich, jederzeit Beobachter an – oder abzumelden. Die Beobachter entscheiden, ob sie
Nachrichten behandeln oder ignorieren.
Man kann die Verwaltungsschnittstelle des Subjekts erweitern, so dass sich die Beobachter
nur für bestimmte Ereignisse anmelden, also nur für solche, die für sie von Bedeutung sind.
Das Subjekt informiert nun immer nur die Beobachter, die sich für dieses bestimmte Ereignis
eingetragen haben.
Dr. Bernhard Pfeifer Grundlagen der Programmierung WS 06/07 UMIT Institute for Biomedical Engineering
Design Patterns - Grundlagen Anti Patterns Smalltalk Katalog der Patterns Creational Patterns Structural Patterns Behavioral Patterns Idiom Java - Allge
Observer
Observer Nachteile
Dr. Bernhard Pfeifer Grundlagen der Programmierung WS 06/07 UMIT Institute for Biomedical Engineering
Design Patterns - Grundlagen Anti Patterns Smalltalk Katalog der Patterns Creational Patterns Structural Patterns Behavioral Patterns Idiom Java - Allge
Observer
1 p u b l i c c l a s s ObserverAnwendung {
2 p u b l i c s t a t i c v o i d main ( S t r i n g [ ] a r g s ) {
3 Ding d = new Ding ( ) ;
4 B e o b a c h t e r b = new B e o b a c h t e r ( ) ;
5 d . addObserver (b ) ;
6 d . s e t V a l u e ( ” Observer Test ” ) ;
7 }
8 }
9
10 // Ding i s t b e o b a c h t b a r !
11 i m p o r t j a v a . u t i l . O b s e r v a b l e ;
12 p u b l i c c l a s s Ding e x t e n d s O b s e r v a b l e {
13 private String value ;
14 public void setValue ( String s ) {
15 value = s ;
16 setChanged ( ) ;
17 notifyObservers ( value );
18 }
19 }
20
21
22 // d e r B e o b a c h t e r kann d i e B e n a c h r i c h t i g u n g i n c l .
23 // A b s e n d e r a d r e s s e empfangen und d a r a u f r e a g i e r e n
24 i m p o r t j a v a . u t i l . O b s e r v e r ;
25 i m p o r t j a v a . u t i l . O b s e r v a b l e ;
26 c l a s s B e o b a c h t e r i m p l e m e n t s O b s e r v e r {
27 p u b l i c void update ( Observable o , Object s t r ) {
28 System . o u t . p r i n t l n ( ” u p d a t e : ” + s t r . t o S t r i n g ( ) ) ;
29 }
30 }
Dr. Bernhard Pfeifer Grundlagen der Programmierung WS 06/07 UMIT Institute for Biomedical Engineering
Design Patterns - Grundlagen Anti Patterns Smalltalk Katalog der Patterns Creational Patterns Structural Patterns Behavioral Patterns Idiom Java - Allge
Idiom
Eigenschaften
programmiersprachenspezifisch
zu finden im Feinentwurf und Implementierung (niedrige
Abstraktionsebene). Es geht also dabei um die Implementierung von
speziellen Entwurfsaspekten.
Dr. Bernhard Pfeifer Grundlagen der Programmierung WS 06/07 UMIT Institute for Biomedical Engineering
Design Patterns - Grundlagen Anti Patterns Smalltalk Katalog der Patterns Creational Patterns Structural Patterns Behavioral Patterns Idiom Java - Allge
Idiom
Anwendung
Konkrete Implementierung eines Entwurfsmusters
Programmierkonventionen: Grundgedanke ”The code is not yours”, z.
B. Codeformatierung, Namenskonventionen, Kommentar
Formatierung, usw. Dies kann mit oder auch ohne technische
Unterstützung (CheckStyle/Pretty Printer) geschehen
Typische Code-Strukturen, z. B. minimale Klassenschnittstelle
Typische Lösungsansätze für die durch die Programmiersprache nicht
direkt unterstützten Probleme, z. B. Speicherverwaltung
Dr. Bernhard Pfeifer Grundlagen der Programmierung WS 06/07 UMIT Institute for Biomedical Engineering
Design Patterns - Grundlagen Anti Patterns Smalltalk Katalog der Patterns Creational Patterns Structural Patterns Behavioral Patterns Idiom Java - Allge
Links etc.
Dr. Bernhard Pfeifer Grundlagen der Programmierung WS 06/07 UMIT Institute for Biomedical Engineering
Literaturverzeichnis
Dr. Bernhard Pfeifer Grundlagen der Programmierung WS 06/07 UMIT Institute for Biomedical Engineering