SlideShare a Scribd company logo
1 of 78
Design Pattern Teil 2 Ein etwas strukturierterer Ansatz http://flickr.com/photos/kingdesmond/477389196/
 
Design Pattern
Creational  Pattern http://flickr.com/photos/factoryjoe/204497604/
Structural  Pattern http://flickr.com/photos/factoryjoe/204497604/ Creational
Behavioral  Pattern http://flickr.com/photos/factoryjoe/204497604/ Creational Structural
http://flickr.com/photos/urbanwoodswalker/2578030316/
Basis-Pattern
Grundlegendes ,[object Object],[object Object],[object Object],[object Object]
Grundlegendes ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Vererbung Ente quaken() schwimmen() anzeigen() fliegen() StockEnte anzeigen() MoorEnte anzeigen() GummiEnte anzeigen() quaken()
Vererbung Ente quaken() schwimmen() anzeigen() fliegen() StockEnte anzeigen() MoorEnte anzeigen() GummiEnte anzeigen() quaken()
Interfaces Ente schwimmen() anzeigen() StockEnte anzeigen() fliegen() quaken() MoorEnte anzeigen() fliegen() quaken() GummiEnte anzeigen() quaken()  QuakFähig quaken() FlugFähig fliegen() LockEnte anzeigen()
Komposition FliegtMitFlügel fliegen() FliegtGarNicht fliegen() Quaken quaken()  QuakVerhalten quaken() Quietschen quaken() StummesQuaken quaken() FlugVerhalten fliegen()
Komposition GummiEnte MoorEnte Ente FlugVerhalten flugVerhalten QuakVerhalten quakVerhalten schwimmen() anzeigen() quakVerhalten =  new  Quaken() flugVerhalten =  new FliegtMitFlügel() quakVerhalten =  new  Quietschen() flugVerhalten =  new FliegtGarNicht()
http://flickr.com/photos/leecullivan/500201058/
Kapseln Sie das, was variiert Ziehen Sie die Komposition der Vererbung vor Programmieren Sie auf eine Schnittstelle, nicht auf eine Implementierung
Observer Subjekt Beobachter
Observer Subjekt Beobachter Registriere mich
Observer Subjekt Beobachter
Observer Observable addObserver() deleteObserver() notifyObservers() Sender getNachricht() <<InterFace>> Observer Update() Empfänger Update(); Anzeigen(); Empfänger Update(); Anzeigen();
Kapseln Sie das, was variiert Ziehen Sie die Komposition der Vererbung vor Programmieren Sie auf eine Schnittstelle, nicht auf eine Implementierung Streben Sie für Objekte, die interagieren, nach Entwürfen mit lockerer Bindung
Decorator preis() preis() preis() preis()
Decorator Getränk Beschreibung getBeschreibung() Preis() Hausmischung Preis() Espresso Preis() ZutatDekorierer getBeschreibung() Milch Getränk getränk Preis() getBeschreibung() Schokolade Getränk getränk Preis() getBeschreibung()
public class  Schokolade { //…. private double  preis() { return  0.40 + getraenk.preis; } //… } Decorator
Decorator Ausgabe:  „Kakao + Schokolade + Milch +    Schokolade“ Ausgabe:  „Kakao + DoppelSchokolade +  Milch“
Kapseln Sie das, was variiert Ziehen Sie die Komposition der Vererbung vor Programmieren Sie auf eine Schnittstelle, nicht auf eine Implementierung Streben Sie für Objekte, die interagieren, nach Entwürfen mit lockerer Bindung Klassen sollten für Erweiterungen offen, aber für Veränderung geschlossen sein.
Factory
Factory Method Burger AktionsChickenBurger McPlusCity bestelleBurger() TeurerChickenBurger
[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],erstelleBurger()
Factory Method Burger AktionsChickenBurger McPlusCity bestelleBurger() erstelleBurger() TeurerChickenBurger
Factory Method Burger AktionsChickenBurger McPlusCity bestelleBurger() erstelleBurger() TeurerChickenBurger McFiliale bestelleBurger() reinigeFiliale()
Kapseln Sie das, was variiert Ziehen Sie die Komposition der Vererbung vor Programmieren Sie auf eine Schnittstelle, nicht auf eine Implementierung Streben Sie für Objekte, die interagieren, nach Entwürfen mit lockerer Bindung Klassen sollten für Erweiterungen offen, aber für Veränderung geschlossen sein. Stützen Sie sich auf Abstraktionen. Stützen Sie sich nicht auf konkrete Klassen
Abstract Factory
 
Abstract Factory
Singleton ,[object Object],[object Object],[object Object],[object Object]
Singleton public class  Singleton { private static  SingleTon einzigeInstanz;   private   Singleton () {}   public   static  Singleton  getInstanz ()    { if (einzigeInstanz == null) { einzigeInstanz =  new   Singleton (); } return  einzigeInstanz; }   }
Singleton public class  Singleton { private static  SingleTon einzigeInstanz;   private   Singleton () {}   public   static  Singleton  getInstanz ()    { if (einzigeInstanz == null) { einzigeInstanz =  new   Singleton (); } return  einzigeInstanz; }   } Verzögerte Instantiierung
Singleton public class  Singleton { private static  SingleTon einzigeInstanz;   private   Singleton () {}   public   static   synchronized  Singleton  getInstanz ()    { if (einzigeInstanz == null) { einzigeInstanz =  new   Singleton (); } return  einzigeInstanz; }   }
Problem Multithreading public class  Singleton { private static  SingleTon einzigeInstanz =  new   Singleton();   private   Singleton () {}   public   static   synchronized  Singleton  getInstanz ()    { return  einzigeInstanz; }   } Verzögert    Vorzeitig
Problem Multithreading Zweifach geprüftes Sperren public  class  Singleton { private volatile static  SingleTon einzigeInstanz;   private   Singleton () {}   public   static   Singleton  getInstanz ()    { if ( einzigeInstanz == null) { synchronized  (  Singleton.class ) { if ( einzigeInstanz == null) { einzigeInstanz =  new   Singleton (); } } return  einzigeInstanz; }   }
Pattern in freier Wildbahn J2EE
J2EE-Beispiele ,[object Object],[object Object],[object Object],[object Object]
J2EE-Musterkatalog [SUN]
Zusammengesetze Muster
StockEnte quaken() QuakFähig quaken() LockPfeife quaken() GummiEnte quaken()
public class  EntenSimulator { //…. void  simulieren() { Quakfähig   stockEnte =  new  StockEnte(); Quakfähig  lockPfeife =  new  LockPfeife(); Quakfähig  gummiEnte =  new  GummiEnte(); simulieren(stockEnte); simulieren(lockPfeife); } void  simulieren (Quakfähig  ente) { ente.quaken(); } //… }
StockEnte quaken() QuakFähig quaken() LockPfeife quaken() GummiEnte quaken() Gans schnattern()
public class  GansAdapter implements  Quakfähig { Gans gans; //…. public void  quaken() { gans.schnattern(); } //… }
StockEnte quaken() QuakFähig quaken() LockPfeife quaken() GummiEnte quaken() GansAdapter quaken()
public class  EntenSimulator { //…. void  simulieren() { //…. Quakfähig  gummiEnte =  new  GummiEnte(); Quakfähig  gansEnte=  new  GansAdapter(new Gans()); simulieren(stockEnte); simulieren(gansEnte); } void  simulieren (Quakfähig  ente) { ente.quaken(); } //… }
public class  EntenSimulator { //…. void  simulieren() { //…. Quakfähig  gummiEnte =  new  GummiEnte(); Quakfähig  gansEnte=  new  GansAdapter(new Gans()); simulieren(stockEnte); simulieren(gansEnte); } void  simulieren (Quakfähig  ente) { ente.quaken(); } //… }
public class  Quakzähler implements  Quakfähig { Quakfähig  ente; int  anzahlDerQuaks; //…. public   void  quaken() { //…. ente.quaken(); anzahlDerQuaks++; } //… }
public class  EntenSimulator { //…. void  simulieren() { //…. Quakfähig  gummiEnte =  new  QuakZähler(new StockEnte()); Quakfähig  gansEnte=  new  GansAdapter(new Gans()); simulieren(stockEnte); simulieren(gansEnte); } void  simulieren (Quakfähig  ente) { ente.quaken(); } //… }
Adapter + Decorator +  Abstract Factory
Adapter + Decorator + Abstract Factory +  Composite
public class  Schar implements  Quakfähig { ArrayList  quakende = new  ArrayList () public   void  hinzufügen( Quakfähig  quaker) { quakende.add(quaker); } public   void  quaken() { Iterator iterator = quakende.iterator(); while( iterator.hasNext() ) { Quakfähig  quaker = ( Quakfähig )iterator.next(); quaker.quaken(); } } //… }
Adapter + Decorator + Abstract Factory + Composite + Iterator  +  Observer
Musterkataloge http://flickr.com/photos/northbaywanderer/121971249/
Design Pattern ,[object Object],[object Object],[object Object]
 
ZUGABE? ,[object Object]
Command
Command http://de.wikipedia.org/wiki/Kommando_(Entwurfsmuster)
Kapseln Sie das, was variiert Ziehen Sie die Komposition der Vererbung vor Programmieren Sie auf eine Schnittstelle, nicht auf eine Implementierung Streben Sie für Objekte, die interagieren, nach Entwürfen mit lockerer Bindung Klassen sollten für Ertweiterungen offen, aber für Verönderung geschlossen sein. Stützen Sie sich auf Abstraktionen. Stützen Sie sich nicht auf konkrete Klassen Sprechen Sie nur mit Ihren Freunden
Adapter ,[object Object],[object Object]
Facade ,[object Object],[object Object],[object Object],[object Object]
Template ,[object Object],[object Object]
Kapseln Sie das, was variiert Ziehen Sie die Komposition der Vererbung vor Programmieren Sie auf eine Schnittstelle, nicht auf eine Implementierung Streben Sie für Objekte, die interagieren, nach Entwürfen mit lockerer Bindung Klassen sollten für Ertweiterungen offen, aber für Verönderung geschlossen sein. Stützen Sie sich auf Abstraktionen. Stützen Sie sich nicht auf konkrete Klassen Sprechen Sie nur mit Ihren Freunden Versuchen Sie nicht uns anzurufen, wir rufen Sie an
Iterator ,[object Object]
Composite ,[object Object],[object Object]
State ,[object Object]
MOTORRAD ,[object Object],http://flickr.com/photos/neilw/192737187/
Kapseln Sie das, was variiert Ziehen Sie die Komposition der Vererbung vor Programmieren Sie auf eine Schnittstelle, nicht auf eine Implementierung Streben Sie für Objekte, die interagieren, nach Entwürfen mit lockerer Bindung Klassen sollten für Ertweiterungen offen, aber für Verönderung geschlossen sein. Stützen Sie sich auf Abstraktionen. Stützen Sie sich nicht auf konkrete Klassen Sprechen Sie nur mit Ihren Freunden Versuchen Sie nicht uns anzurufen, wir rufen Sie an Eine Klasse sollte nur einen Grund haben, sich zu ändern
Proxy ,[object Object],[object Object],[object Object]
YES WE
Quellenverzeichnis ,[object Object]

More Related Content

Viewers also liked

Workshop Fahrstuhl-Pitch WoMenPower 2011 kathrin sebens
Workshop Fahrstuhl-Pitch WoMenPower 2011 kathrin sebensWorkshop Fahrstuhl-Pitch WoMenPower 2011 kathrin sebens
Workshop Fahrstuhl-Pitch WoMenPower 2011 kathrin sebensKathrin Sebens
 
Tirol vorreiter e tourismus
Tirol vorreiter e tourismusTirol vorreiter e tourismus
Tirol vorreiter e tourismusSTIinnsbruck
 
Ejemplo-proyecto-completo-pmbok
Ejemplo-proyecto-completo-pmbokEjemplo-proyecto-completo-pmbok
Ejemplo-proyecto-completo-pmbokGs Importations
 
Mythos und Wahrheit: Wikis für die Technische Dokumentation at tekom-Regional...
Mythos und Wahrheit: Wikis für die Technische Dokumentation at tekom-Regional...Mythos und Wahrheit: Wikis für die Technische Dokumentation at tekom-Regional...
Mythos und Wahrheit: Wikis für die Technische Dokumentation at tekom-Regional...K15t
 
Ejemplos 1 análisis e interpretación de datos
Ejemplos 1 análisis e interpretación de datosEjemplos 1 análisis e interpretación de datos
Ejemplos 1 análisis e interpretación de datoskrank1981
 
Operative instruments in Conservative Dentistry & Endodontics
Operative instruments in Conservative Dentistry & EndodonticsOperative instruments in Conservative Dentistry & Endodontics
Operative instruments in Conservative Dentistry & EndodonticsAshok Ayer
 
Assessment in Social work: A guide for learning and teaching
Assessment in Social work: A guide for learning and teachingAssessment in Social work: A guide for learning and teaching
Assessment in Social work: A guide for learning and teachingforeman
 
Workplace Accountability: How Effective Managers Create a Culture of Ownership
Workplace Accountability: How Effective Managers Create a Culture of OwnershipWorkplace Accountability: How Effective Managers Create a Culture of Ownership
Workplace Accountability: How Effective Managers Create a Culture of OwnershipThe Business LockerRoom
 
Pollution And Human Health
Pollution And Human HealthPollution And Human Health
Pollution And Human HealthMike Slater
 
Introducing Apple Watch
Introducing Apple WatchIntroducing Apple Watch
Introducing Apple WatchJJ Wu
 
Html / CSS Presentation
Html / CSS PresentationHtml / CSS Presentation
Html / CSS PresentationShawn Calvert
 
Thai tech startup ecosystem report 2017
Thai tech startup ecosystem report 2017Thai tech startup ecosystem report 2017
Thai tech startup ecosystem report 2017Techsauce Media
 
Best Practices for Pitching to Judges - Startup Weekend Doha 2016
Best Practices for Pitching to Judges -  Startup Weekend Doha 2016Best Practices for Pitching to Judges -  Startup Weekend Doha 2016
Best Practices for Pitching to Judges - Startup Weekend Doha 2016Emad Saif
 

Viewers also liked (20)

Workshop Fahrstuhl-Pitch WoMenPower 2011 kathrin sebens
Workshop Fahrstuhl-Pitch WoMenPower 2011 kathrin sebensWorkshop Fahrstuhl-Pitch WoMenPower 2011 kathrin sebens
Workshop Fahrstuhl-Pitch WoMenPower 2011 kathrin sebens
 
Gestion De Inventarios
Gestion De InventariosGestion De Inventarios
Gestion De Inventarios
 
Tirol vorreiter e tourismus
Tirol vorreiter e tourismusTirol vorreiter e tourismus
Tirol vorreiter e tourismus
 
Ejemplo-proyecto-completo-pmbok
Ejemplo-proyecto-completo-pmbokEjemplo-proyecto-completo-pmbok
Ejemplo-proyecto-completo-pmbok
 
Mythos und Wahrheit: Wikis für die Technische Dokumentation at tekom-Regional...
Mythos und Wahrheit: Wikis für die Technische Dokumentation at tekom-Regional...Mythos und Wahrheit: Wikis für die Technische Dokumentation at tekom-Regional...
Mythos und Wahrheit: Wikis für die Technische Dokumentation at tekom-Regional...
 
Ejemplos 1 análisis e interpretación de datos
Ejemplos 1 análisis e interpretación de datosEjemplos 1 análisis e interpretación de datos
Ejemplos 1 análisis e interpretación de datos
 
Modelisation et maquettage 2015
Modelisation et maquettage 2015Modelisation et maquettage 2015
Modelisation et maquettage 2015
 
Operative instruments in Conservative Dentistry & Endodontics
Operative instruments in Conservative Dentistry & EndodonticsOperative instruments in Conservative Dentistry & Endodontics
Operative instruments in Conservative Dentistry & Endodontics
 
Banking in India
Banking in IndiaBanking in India
Banking in India
 
Types of Irrigation
Types of IrrigationTypes of Irrigation
Types of Irrigation
 
Assessment in Social work: A guide for learning and teaching
Assessment in Social work: A guide for learning and teachingAssessment in Social work: A guide for learning and teaching
Assessment in Social work: A guide for learning and teaching
 
Workplace Accountability: How Effective Managers Create a Culture of Ownership
Workplace Accountability: How Effective Managers Create a Culture of OwnershipWorkplace Accountability: How Effective Managers Create a Culture of Ownership
Workplace Accountability: How Effective Managers Create a Culture of Ownership
 
Crm final ppt
Crm final pptCrm final ppt
Crm final ppt
 
Pollution And Human Health
Pollution And Human HealthPollution And Human Health
Pollution And Human Health
 
isolation
isolationisolation
isolation
 
Introducing Apple Watch
Introducing Apple WatchIntroducing Apple Watch
Introducing Apple Watch
 
Women empowerment
Women empowermentWomen empowerment
Women empowerment
 
Html / CSS Presentation
Html / CSS PresentationHtml / CSS Presentation
Html / CSS Presentation
 
Thai tech startup ecosystem report 2017
Thai tech startup ecosystem report 2017Thai tech startup ecosystem report 2017
Thai tech startup ecosystem report 2017
 
Best Practices for Pitching to Judges - Startup Weekend Doha 2016
Best Practices for Pitching to Judges -  Startup Weekend Doha 2016Best Practices for Pitching to Judges -  Startup Weekend Doha 2016
Best Practices for Pitching to Judges - Startup Weekend Doha 2016
 

Similar to Java Design Pattern

Go - Googles Sprache für skalierbare Systeme
Go - Googles Sprache für skalierbare SystemeGo - Googles Sprache für skalierbare Systeme
Go - Googles Sprache für skalierbare SystemeFrank Müller
 
SOLID Prinzipien, Designgrundlagen objektorientierter Systeme
SOLID Prinzipien, Designgrundlagen objektorientierter SystemeSOLID Prinzipien, Designgrundlagen objektorientierter Systeme
SOLID Prinzipien, Designgrundlagen objektorientierter SystemeMario Rodler
 
Java Code Quality: Gute Software braucht guten Code - Regeln für verständlich...
Java Code Quality: Gute Software braucht guten Code - Regeln für verständlich...Java Code Quality: Gute Software braucht guten Code - Regeln für verständlich...
Java Code Quality: Gute Software braucht guten Code - Regeln für verständlich...GFU Cyrus AG
 
Mögen die Tests mit dir sein
Mögen die Tests mit dir seinMögen die Tests mit dir sein
Mögen die Tests mit dir seincodepitbull
 
2009 03 17 Spring101
2009 03 17 Spring1012009 03 17 Spring101
2009 03 17 Spring101gueste4be40
 
Scalaz introduction for Java programmers
Scalaz introduction for Java programmersScalaz introduction for Java programmers
Scalaz introduction for Java programmersBernhard Huemer
 
Feige sein! Testen im Java-EE-Umfeld
Feige sein! Testen im Java-EE-UmfeldFeige sein! Testen im Java-EE-Umfeld
Feige sein! Testen im Java-EE-Umfeldgedoplan
 
Workshop zu Hibernate 3.2.2 GA
Workshop zu Hibernate 3.2.2 GAWorkshop zu Hibernate 3.2.2 GA
Workshop zu Hibernate 3.2.2 GAOliver Belikan
 
Funktionales Programmieren mit Clojure
Funktionales Programmieren mit ClojureFunktionales Programmieren mit Clojure
Funktionales Programmieren mit ClojureDr. Christian Betz
 
Warum ECMAScript 6 die Welt ein Stückchen besser macht
Warum ECMAScript 6 die Welt ein Stückchen besser machtWarum ECMAScript 6 die Welt ein Stückchen besser macht
Warum ECMAScript 6 die Welt ein Stückchen besser machtSebastian Springer
 
Mehr Dynamik Durch Skriptsprachen
Mehr Dynamik Durch SkriptsprachenMehr Dynamik Durch Skriptsprachen
Mehr Dynamik Durch Skriptsprachenjlink
 
Testen im EE-Umfeld – Seien Sie feige!
Testen im EE-Umfeld – Seien Sie feige!Testen im EE-Umfeld – Seien Sie feige!
Testen im EE-Umfeld – Seien Sie feige!gedoplan
 
Kata - Java - Tests - JUnit 4
Kata - Java - Tests - JUnit 4Kata - Java - Tests - JUnit 4
Kata - Java - Tests - JUnit 4kaftanenko
 
31. Teffen der .NET User Group Rhein-Neckar mit Robin Sedlaczek - SpeakRoslyn
31. Teffen der .NET User Group Rhein-Neckar mit Robin Sedlaczek - SpeakRoslyn31. Teffen der .NET User Group Rhein-Neckar mit Robin Sedlaczek - SpeakRoslyn
31. Teffen der .NET User Group Rhein-Neckar mit Robin Sedlaczek - SpeakRoslyn.NET User Group Rhein-Neckar
 

Similar to Java Design Pattern (20)

Go - Googles Sprache für skalierbare Systeme
Go - Googles Sprache für skalierbare SystemeGo - Googles Sprache für skalierbare Systeme
Go - Googles Sprache für skalierbare Systeme
 
SOLID Prinzipien, Designgrundlagen objektorientierter Systeme
SOLID Prinzipien, Designgrundlagen objektorientierter SystemeSOLID Prinzipien, Designgrundlagen objektorientierter Systeme
SOLID Prinzipien, Designgrundlagen objektorientierter Systeme
 
Java Code Quality: Gute Software braucht guten Code - Regeln für verständlich...
Java Code Quality: Gute Software braucht guten Code - Regeln für verständlich...Java Code Quality: Gute Software braucht guten Code - Regeln für verständlich...
Java Code Quality: Gute Software braucht guten Code - Regeln für verständlich...
 
Mögen die Tests mit dir sein
Mögen die Tests mit dir seinMögen die Tests mit dir sein
Mögen die Tests mit dir sein
 
2009 03 17 Spring101
2009 03 17 Spring1012009 03 17 Spring101
2009 03 17 Spring101
 
TypeScript
TypeScriptTypeScript
TypeScript
 
Scalaz introduction for Java programmers
Scalaz introduction for Java programmersScalaz introduction for Java programmers
Scalaz introduction for Java programmers
 
Feige sein! Testen im Java-EE-Umfeld
Feige sein! Testen im Java-EE-UmfeldFeige sein! Testen im Java-EE-Umfeld
Feige sein! Testen im Java-EE-Umfeld
 
Workshop zu Hibernate 3.2.2 GA
Workshop zu Hibernate 3.2.2 GAWorkshop zu Hibernate 3.2.2 GA
Workshop zu Hibernate 3.2.2 GA
 
Funktionales Programmieren mit Clojure
Funktionales Programmieren mit ClojureFunktionales Programmieren mit Clojure
Funktionales Programmieren mit Clojure
 
Warum ECMAScript 6 die Welt ein Stückchen besser macht
Warum ECMAScript 6 die Welt ein Stückchen besser machtWarum ECMAScript 6 die Welt ein Stückchen besser macht
Warum ECMAScript 6 die Welt ein Stückchen besser macht
 
Mehr Dynamik Durch Skriptsprachen
Mehr Dynamik Durch SkriptsprachenMehr Dynamik Durch Skriptsprachen
Mehr Dynamik Durch Skriptsprachen
 
Testen im EE-Umfeld – Seien Sie feige!
Testen im EE-Umfeld – Seien Sie feige!Testen im EE-Umfeld – Seien Sie feige!
Testen im EE-Umfeld – Seien Sie feige!
 
TypeScript
TypeScriptTypeScript
TypeScript
 
JavaScript Performance
JavaScript PerformanceJavaScript Performance
JavaScript Performance
 
node.js
node.jsnode.js
node.js
 
Wicket Kurzübersicht
Wicket KurzübersichtWicket Kurzübersicht
Wicket Kurzübersicht
 
Kata - Java - Tests - JUnit 4
Kata - Java - Tests - JUnit 4Kata - Java - Tests - JUnit 4
Kata - Java - Tests - JUnit 4
 
Scala und Lift
Scala und LiftScala und Lift
Scala und Lift
 
31. Teffen der .NET User Group Rhein-Neckar mit Robin Sedlaczek - SpeakRoslyn
31. Teffen der .NET User Group Rhein-Neckar mit Robin Sedlaczek - SpeakRoslyn31. Teffen der .NET User Group Rhein-Neckar mit Robin Sedlaczek - SpeakRoslyn
31. Teffen der .NET User Group Rhein-Neckar mit Robin Sedlaczek - SpeakRoslyn
 

Java Design Pattern

  • 1. Design Pattern Teil 2 Ein etwas strukturierterer Ansatz http://flickr.com/photos/kingdesmond/477389196/
  • 2.  
  • 4. Creational Pattern http://flickr.com/photos/factoryjoe/204497604/
  • 5. Structural Pattern http://flickr.com/photos/factoryjoe/204497604/ Creational
  • 6. Behavioral Pattern http://flickr.com/photos/factoryjoe/204497604/ Creational Structural
  • 9.
  • 10.
  • 11. Vererbung Ente quaken() schwimmen() anzeigen() fliegen() StockEnte anzeigen() MoorEnte anzeigen() GummiEnte anzeigen() quaken()
  • 12. Vererbung Ente quaken() schwimmen() anzeigen() fliegen() StockEnte anzeigen() MoorEnte anzeigen() GummiEnte anzeigen() quaken()
  • 13. Interfaces Ente schwimmen() anzeigen() StockEnte anzeigen() fliegen() quaken() MoorEnte anzeigen() fliegen() quaken() GummiEnte anzeigen() quaken() QuakFähig quaken() FlugFähig fliegen() LockEnte anzeigen()
  • 14. Komposition FliegtMitFlügel fliegen() FliegtGarNicht fliegen() Quaken quaken() QuakVerhalten quaken() Quietschen quaken() StummesQuaken quaken() FlugVerhalten fliegen()
  • 15. Komposition GummiEnte MoorEnte Ente FlugVerhalten flugVerhalten QuakVerhalten quakVerhalten schwimmen() anzeigen() quakVerhalten = new Quaken() flugVerhalten = new FliegtMitFlügel() quakVerhalten = new Quietschen() flugVerhalten = new FliegtGarNicht()
  • 17. Kapseln Sie das, was variiert Ziehen Sie die Komposition der Vererbung vor Programmieren Sie auf eine Schnittstelle, nicht auf eine Implementierung
  • 19. Observer Subjekt Beobachter Registriere mich
  • 21. Observer Observable addObserver() deleteObserver() notifyObservers() Sender getNachricht() <<InterFace>> Observer Update() Empfänger Update(); Anzeigen(); Empfänger Update(); Anzeigen();
  • 22. Kapseln Sie das, was variiert Ziehen Sie die Komposition der Vererbung vor Programmieren Sie auf eine Schnittstelle, nicht auf eine Implementierung Streben Sie für Objekte, die interagieren, nach Entwürfen mit lockerer Bindung
  • 23. Decorator preis() preis() preis() preis()
  • 24. Decorator Getränk Beschreibung getBeschreibung() Preis() Hausmischung Preis() Espresso Preis() ZutatDekorierer getBeschreibung() Milch Getränk getränk Preis() getBeschreibung() Schokolade Getränk getränk Preis() getBeschreibung()
  • 25. public class Schokolade { //…. private double preis() { return 0.40 + getraenk.preis; } //… } Decorator
  • 26. Decorator Ausgabe: „Kakao + Schokolade + Milch + Schokolade“ Ausgabe: „Kakao + DoppelSchokolade + Milch“
  • 27. Kapseln Sie das, was variiert Ziehen Sie die Komposition der Vererbung vor Programmieren Sie auf eine Schnittstelle, nicht auf eine Implementierung Streben Sie für Objekte, die interagieren, nach Entwürfen mit lockerer Bindung Klassen sollten für Erweiterungen offen, aber für Veränderung geschlossen sein.
  • 29. Factory Method Burger AktionsChickenBurger McPlusCity bestelleBurger() TeurerChickenBurger
  • 30.
  • 31. Factory Method Burger AktionsChickenBurger McPlusCity bestelleBurger() erstelleBurger() TeurerChickenBurger
  • 32. Factory Method Burger AktionsChickenBurger McPlusCity bestelleBurger() erstelleBurger() TeurerChickenBurger McFiliale bestelleBurger() reinigeFiliale()
  • 33. Kapseln Sie das, was variiert Ziehen Sie die Komposition der Vererbung vor Programmieren Sie auf eine Schnittstelle, nicht auf eine Implementierung Streben Sie für Objekte, die interagieren, nach Entwürfen mit lockerer Bindung Klassen sollten für Erweiterungen offen, aber für Veränderung geschlossen sein. Stützen Sie sich auf Abstraktionen. Stützen Sie sich nicht auf konkrete Klassen
  • 35.  
  • 37.
  • 38. Singleton public class Singleton { private static SingleTon einzigeInstanz;   private Singleton () {}   public static Singleton getInstanz () { if (einzigeInstanz == null) { einzigeInstanz = new Singleton (); } return einzigeInstanz; }   }
  • 39. Singleton public class Singleton { private static SingleTon einzigeInstanz;   private Singleton () {}   public static Singleton getInstanz () { if (einzigeInstanz == null) { einzigeInstanz = new Singleton (); } return einzigeInstanz; }   } Verzögerte Instantiierung
  • 40. Singleton public class Singleton { private static SingleTon einzigeInstanz;   private Singleton () {}   public static synchronized Singleton getInstanz () { if (einzigeInstanz == null) { einzigeInstanz = new Singleton (); } return einzigeInstanz; }   }
  • 41. Problem Multithreading public class Singleton { private static SingleTon einzigeInstanz = new Singleton();   private Singleton () {}   public static synchronized Singleton getInstanz () { return einzigeInstanz; }   } Verzögert  Vorzeitig
  • 42. Problem Multithreading Zweifach geprüftes Sperren public class Singleton { private volatile static SingleTon einzigeInstanz;   private Singleton () {}   public static Singleton getInstanz () { if ( einzigeInstanz == null) { synchronized ( Singleton.class ) { if ( einzigeInstanz == null) { einzigeInstanz = new Singleton (); } } return einzigeInstanz; }   }
  • 43. Pattern in freier Wildbahn J2EE
  • 44.
  • 47. StockEnte quaken() QuakFähig quaken() LockPfeife quaken() GummiEnte quaken()
  • 48. public class EntenSimulator { //…. void simulieren() { Quakfähig stockEnte = new StockEnte(); Quakfähig lockPfeife = new LockPfeife(); Quakfähig gummiEnte = new GummiEnte(); simulieren(stockEnte); simulieren(lockPfeife); } void simulieren (Quakfähig ente) { ente.quaken(); } //… }
  • 49. StockEnte quaken() QuakFähig quaken() LockPfeife quaken() GummiEnte quaken() Gans schnattern()
  • 50. public class GansAdapter implements Quakfähig { Gans gans; //…. public void quaken() { gans.schnattern(); } //… }
  • 51. StockEnte quaken() QuakFähig quaken() LockPfeife quaken() GummiEnte quaken() GansAdapter quaken()
  • 52. public class EntenSimulator { //…. void simulieren() { //…. Quakfähig gummiEnte = new GummiEnte(); Quakfähig gansEnte= new GansAdapter(new Gans()); simulieren(stockEnte); simulieren(gansEnte); } void simulieren (Quakfähig ente) { ente.quaken(); } //… }
  • 53. public class EntenSimulator { //…. void simulieren() { //…. Quakfähig gummiEnte = new GummiEnte(); Quakfähig gansEnte= new GansAdapter(new Gans()); simulieren(stockEnte); simulieren(gansEnte); } void simulieren (Quakfähig ente) { ente.quaken(); } //… }
  • 54. public class Quakzähler implements Quakfähig { Quakfähig ente; int anzahlDerQuaks; //…. public void quaken() { //…. ente.quaken(); anzahlDerQuaks++; } //… }
  • 55. public class EntenSimulator { //…. void simulieren() { //…. Quakfähig gummiEnte = new QuakZähler(new StockEnte()); Quakfähig gansEnte= new GansAdapter(new Gans()); simulieren(stockEnte); simulieren(gansEnte); } void simulieren (Quakfähig ente) { ente.quaken(); } //… }
  • 56. Adapter + Decorator + Abstract Factory
  • 57. Adapter + Decorator + Abstract Factory + Composite
  • 58. public class Schar implements Quakfähig { ArrayList quakende = new ArrayList () public void hinzufügen( Quakfähig quaker) { quakende.add(quaker); } public void quaken() { Iterator iterator = quakende.iterator(); while( iterator.hasNext() ) { Quakfähig quaker = ( Quakfähig )iterator.next(); quaker.quaken(); } } //… }
  • 59. Adapter + Decorator + Abstract Factory + Composite + Iterator + Observer
  • 61.
  • 62.  
  • 63.
  • 66. Kapseln Sie das, was variiert Ziehen Sie die Komposition der Vererbung vor Programmieren Sie auf eine Schnittstelle, nicht auf eine Implementierung Streben Sie für Objekte, die interagieren, nach Entwürfen mit lockerer Bindung Klassen sollten für Ertweiterungen offen, aber für Verönderung geschlossen sein. Stützen Sie sich auf Abstraktionen. Stützen Sie sich nicht auf konkrete Klassen Sprechen Sie nur mit Ihren Freunden
  • 67.
  • 68.
  • 69.
  • 70. Kapseln Sie das, was variiert Ziehen Sie die Komposition der Vererbung vor Programmieren Sie auf eine Schnittstelle, nicht auf eine Implementierung Streben Sie für Objekte, die interagieren, nach Entwürfen mit lockerer Bindung Klassen sollten für Ertweiterungen offen, aber für Verönderung geschlossen sein. Stützen Sie sich auf Abstraktionen. Stützen Sie sich nicht auf konkrete Klassen Sprechen Sie nur mit Ihren Freunden Versuchen Sie nicht uns anzurufen, wir rufen Sie an
  • 71.
  • 72.
  • 73.
  • 74.
  • 75. Kapseln Sie das, was variiert Ziehen Sie die Komposition der Vererbung vor Programmieren Sie auf eine Schnittstelle, nicht auf eine Implementierung Streben Sie für Objekte, die interagieren, nach Entwürfen mit lockerer Bindung Klassen sollten für Ertweiterungen offen, aber für Verönderung geschlossen sein. Stützen Sie sich auf Abstraktionen. Stützen Sie sich nicht auf konkrete Klassen Sprechen Sie nur mit Ihren Freunden Versuchen Sie nicht uns anzurufen, wir rufen Sie an Eine Klasse sollte nur einen Grund haben, sich zu ändern
  • 76.
  • 78.

Editor's Notes

  1. Musterkataloge
  2. Vorteile Auslösender und Ausführender sind entkoppelt. Befehlsobjekte können wie andere Objekte auch manipuliert werden. (Verändern, Filtern, Zwischenspeichern, ... ) Befehlsobjekte können zu komplexen Befehlen kombiniert werden ( Makros , realisiert als Kompositum ) Nachteile Es wird für jedes Kommando eine neue Klasse benötigt. Dies kann sehr schnell zu einer großen Menge von Klassen führen. Beispiel Ein gutes Beispiel für das Befehlsmuster, ist die Verknüpfung von GUI -Elementen, wie Schaltflächen oder Menüpunkten , mit den entsprechenden Aktionen: Konkrete Befehle realisieren dann Aktionen wie Datei öffnen , Rückgängig oder Schreibmarke nach rechts Klienten sind die Applikation oder Dialoge. Aufrufer sind Schaltflächen, Menüpunkte oder Hotkeys . Empfänger sind die Applikation ( Datei öffnen ) oder das Dokument ( Rückgängig , Einfügemarke nach rechts )