Your SlideShare is downloading. ×
Java Design Pattern
Java Design Pattern
Java Design Pattern
Java Design Pattern
Java Design Pattern
Java Design Pattern
Java Design Pattern
Java Design Pattern
Java Design Pattern
Java Design Pattern
Java Design Pattern
Java Design Pattern
Java Design Pattern
Java Design Pattern
Java Design Pattern
Java Design Pattern
Java Design Pattern
Java Design Pattern
Java Design Pattern
Java Design Pattern
Java Design Pattern
Java Design Pattern
Java Design Pattern
Java Design Pattern
Java Design Pattern
Java Design Pattern
Java Design Pattern
Java Design Pattern
Java Design Pattern
Java Design Pattern
Java Design Pattern
Java Design Pattern
Java Design Pattern
Java Design Pattern
Java Design Pattern
Java Design Pattern
Java Design Pattern
Java Design Pattern
Java Design Pattern
Java Design Pattern
Java Design Pattern
Java Design Pattern
Java Design Pattern
Java Design Pattern
Java Design Pattern
Java Design Pattern
Java Design Pattern
Java Design Pattern
Java Design Pattern
Java Design Pattern
Java Design Pattern
Java Design Pattern
Java Design Pattern
Java Design Pattern
Java Design Pattern
Java Design Pattern
Java Design Pattern
Java Design Pattern
Java Design Pattern
Java Design Pattern
Java Design Pattern
Java Design Pattern
Java Design Pattern
Java Design Pattern
Java Design Pattern
Java Design Pattern
Java Design Pattern
Java Design Pattern
Java Design Pattern
Java Design Pattern
Java Design Pattern
Java Design Pattern
Java Design Pattern
Java Design Pattern
Java Design Pattern
Java Design Pattern
Java Design Pattern
Java Design Pattern
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

Java Design Pattern

2,540

Published on

A detailed overview ;) of design paterns …

A detailed overview ;) of design paterns

I highly recommend the O'Reilly book "Head First Design Pattern" for more information!

Published in: Technology
1 Comment
1 Like
Statistics
Notes
  • Excellent presentation, never saw such a interactive & rich presentation on design patterns. Understood most part, if it was in English it would have been more better. Iis there any way you could translate explanation in English and post a new one? I like German, some day i would try to learn it, but for now I know Hindi, Telugu, Tamil, English languages only.
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
No Downloads
Views
Total Views
2,540
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
0
Comments
1
Likes
1
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide
  • Musterkataloge
  • 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 )
  • Transcript

    • 1. Design Pattern Teil 2 Ein etwas strukturierterer Ansatz http://flickr.com/photos/kingdesmond/477389196/
    • 2.  
    • 3. Design Pattern
    • 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
    • 7. http://flickr.com/photos/urbanwoodswalker/2578030316/
    • 8. Basis-Pattern
    • 9. Grundlegendes
      • Basiswissen OOP
        • Normale Klasse
        • Abstrakte Klasse
        • Interface
    • 10. Grundlegendes
      • Basiswissen OOP
        • Normale Klasse
        • Abstrakte Klasse
        • Interface
      • Beziehungen
        • Is-A (Inheritance)
        • Has-A (Composition)
        • Can-Do (Interfaces)
    • 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()
    • 16. http://flickr.com/photos/leecullivan/500201058/
    • 17. Kapseln Sie das, was variiert Ziehen Sie die Komposition der Vererbung vor Programmieren Sie auf eine Schnittstelle, nicht auf eine Implementierung
    • 18. Observer Subjekt Beobachter
    • 19. Observer Subjekt Beobachter Registriere mich
    • 20. Observer Subjekt Beobachter
    • 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.
    • 28. Factory
    • 29. Factory Method Burger AktionsChickenBurger McPlusCity bestelleBurger() TeurerChickenBurger
    • 30.
      • bestelleBurger()
      • {
      • Burger burger;
      • if(aktionsZeitraum)
      • burger = new AktionsChickenBurger();
      • else
      • burger = new TeurerChickenBurger();
      • burger.grillen();
      • burger.einpacken();
      • return burger;
      • }
      erstelleBurger()
    • 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
    • 34. Abstract Factory
    • 35.  
    • 36. Abstract Factory
    • 37. Singleton
      • Singleton
      • Instance : Singleton
      • Singleton()
      • + getInstance(): Singleton
    • 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. J2EE-Beispiele
      • Decorator
        • new BufferedReader (new InputStreamReader ( System . in ));
      • Session Facade
      • Data Access Object
    • 45. J2EE-Musterkatalog [SUN]
    • 46. Zusammengesetze Muster
    • 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
    • 60. Musterkataloge http://flickr.com/photos/northbaywanderer/121971249/
    • 61. Design Pattern
      • Wiederverwendbarkeit
        • Entkoppeln / Trennen
        • Vereinfachen / Aufteilen
    • 62.  
    • 63. ZUGABE?
      • Noch mehr Pattern…
    • 64. Command
    • 65. Command http://de.wikipedia.org/wiki/Kommando_(Entwurfsmuster)
    • 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. Adapter
      • Zwischenschalten einer Schicht
      • Um Schnittstelle so anzupassen, dass sie ohne änderung übernommen werden kann
    • 68. Facade
      • Schnittstelle Vereinfachen / Schützen
      • Weitere Funktion für Validierung, etc.
      • Kommt in OptimalJ vor
      • Gleicher Aufbau wie Adapter
    • 69. Template
      • Algorithmus
      • Hooks
    • 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. Iterator
      • Unabhängigkeit von der jeweiligen Collection-Implementierung
    • 72. Composite
      • Durchlaufen von “Bäumen”
      • Rekursives Aufrufen
    • 73. State
      • Zustandsabhänige Elemente werden extrahiert
    • 74. MOTORRAD
      • Beispiel
      http://flickr.com/photos/neilw/192737187/
    • 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. Proxy
      • Zwischenschalten einer Schicht
      • Aufbau gleich wie Adapter
      • Zweck unterschiedlich
    • 77. YES WE
    • 78. Quellenverzeichnis
      • [SUN] Alur, Crupi, Malks: core J2EE Patterns. Sun Microsystems Press; Prentice Hall; 2001. (deutsche Übersetzung von Frank Langenau; Markt+Technik Verlag; 2002.)

    ×