Design-Patterns-Katalog...Design-Patterns-Katalog Erzeugungsmuster (Creational Patterns) Abstract...

15

Transcript of Design-Patterns-Katalog...Design-Patterns-Katalog Erzeugungsmuster (Creational Patterns) Abstract...

Page 1: Design-Patterns-Katalog...Design-Patterns-Katalog Erzeugungsmuster (Creational Patterns) Abstract Factory (Abstrakte Fabrik, siehe Abschnitt 3.1) Bereitstellung einer Schnittstelle
Page 2: Design-Patterns-Katalog...Design-Patterns-Katalog Erzeugungsmuster (Creational Patterns) Abstract Factory (Abstrakte Fabrik, siehe Abschnitt 3.1) Bereitstellung einer Schnittstelle
Page 3: Design-Patterns-Katalog...Design-Patterns-Katalog Erzeugungsmuster (Creational Patterns) Abstract Factory (Abstrakte Fabrik, siehe Abschnitt 3.1) Bereitstellung einer Schnittstelle

Design-Patterns-Katalog

Erzeugungsmuster (Creational Patterns)

Abstract Factory (Abstrakte Fabrik, siehe Abschnitt 3.1)

Bereitstellung einer Schnittstelle zum Erzeugen verwandter oder voneinanderabhängiger Objektfamilien ohne die Benennung ihrer konkreten Klassen.

Builder (Erbauer, siehe Abschnitt 3.2)

Getrennte Handhabung der Erzeugungs- und Darstellungsmechanismen komple-xer Objekte zwecks Generierung verschiedener Repräsentationen in einem einzi-gen Erzeugungsprozess.

Factory Method (Fabrikmethode, siehe Abschnitt 3.3)

Definition einer Schnittstelle zur Objekterzeugung, wobei die Bestimmung der zuinstanziierenden Klasse den Unterklassen überlassen bleibt. Das Design PatternFactory Method (Fabrikmethode) gestattet einer Klasse, die Instanziierung anUnterklassen zu delegieren.

Prototype (Prototyp, siehe Abschnitt 3.4)

Spezifikation der zu erzeugenden Objekttypen mittels einer prototypischen In-stanz und Erzeugung neuer Objekte durch Kopieren dieses Prototyps.

Singleton (Singleton, siehe Abschnitt 3.5)

Sicherstellung der Existenz nur einer einzigen Klasseninstanz sowie Bereitstel-lung eines globalen Zugriffspunkts für diese Instanz.

Strukturmuster (Structural Patterns)

Adapter (Adapter, siehe Abschnitt 4.1)

Anpassung der Schnittstelle einer Klasse an ein anderes von den Clients erwarte-tes Interface. Das Design Pattern Adapter (Adapter) ermöglicht die Zusammenar-beit von Klassen, die ansonsten aufgrund der Inkompatibilität ihrer Schnittstellennicht dazu in der Lage wären.

Bridge (Brücke, siehe Abschnitt 4.2)

Entkopplung einer Abstraktion von ihrer Implementierung, so dass beide unab-hängig voneinander variiert werden können.

Page 4: Design-Patterns-Katalog...Design-Patterns-Katalog Erzeugungsmuster (Creational Patterns) Abstract Factory (Abstrakte Fabrik, siehe Abschnitt 3.1) Bereitstellung einer Schnittstelle

Composite (Kompositum, siehe Abschnitt 4.3)

Komposition von Objekten in Baumstrukturen zur Abbildung von Teil-Ganzes-Hie-rarchien. Das Design Pattern Composite (Kompositum) gestattet den Clients eineneinheitlichen Umgang sowohl mit individuellen Objekten als auch mit Objektkom-positionen.

Decorator (Dekorierer, siehe Abschnitt 4.4)

Dynamische Erweiterung der Funktionalität eines Objekts. Decorator-Objektestellen hinsichtlich der Ergänzung einer Klasse um weitere Zuständigkeiten eineflexible Alternative zur Unterklassenbildung dar.

Facade (Fassade, siehe Abschnitt 4.5)

Bereitstellung einer einheitlichen Schnittstelle zu einem Schnittstellensatz ineinem Subsystem. Das Design Pattern Facade (Fassade) definiert eine Schnittstellehöherer Ebene, die die Nutzung des Subsystems vereinfacht.

Flyweight (Fliegengewicht, siehe Abschnitt 4.6)

Gemeinsame Nutzung feingranularer Objekte, um sie auch in großer Anzahl effi-zient nutzen zu können.

Proxy (Proxy, siehe Abschnitt 4.7)

Bereitstellung eines vorgelagerten Stellvertreterobjekts bzw. eines Platzhalterszwecks Zugriffssteuerung eines Objekts.

Verhaltensmuster (Behavioral Patterns)

Chain of Responsibility (Zuständigkeitskette, siehe Abschnitt 5.1)

Unterbindung der Kopplung eines Request-Auslösers mit seinem Empfänger,indem mehr als ein Objekt in die Lage versetzt wird, den Request zu bearbeiten.Die empfangenden Objekte werden miteinander verkettet und der Request wirddann so lange entlang dieser Kette weitergeleitet, bis er von einem Objekt ange-nommen und abgearbeitet wird.

Command (Befehl, siehe Abschnitt 5.2)

Kapselung eines Requests als Objekt, um so die Parametrisierung von Clients mitverschiedenen Requests, Warteschlangen- oder Logging-Operationen sowie dasRückgängigmachen von Operationen zu ermöglichen.

Interpreter (Interpreter, siehe Abschnitt 5.3)

Definition einer Repräsentation für die Grammatik einer gegebenen Sprache undBereitstellung eines Interpreters, der sie nutzt, um in dieser Sprache verfassteSätze zu interpretieren.

Page 5: Design-Patterns-Katalog...Design-Patterns-Katalog Erzeugungsmuster (Creational Patterns) Abstract Factory (Abstrakte Fabrik, siehe Abschnitt 3.1) Bereitstellung einer Schnittstelle

Iterator (Iterator, siehe Abschnitt 5.4)

Bereitstellung eines sequenziellen Zugriffs auf die Elemente eines aggregiertenObjekts, ohne dessen zugrunde liegende Struktur offenzulegen.

Mediator (Vermittler, siehe Abschnitt 5.5)

Definition eines Objekts, das die Interaktionsweise eines Objektsatzes in sich kap-selt. Das Design Pattern Mediator (Vermittler) begünstigt lose Kopplungen, indemes die explizite Referenzierung der Objekte untereinander unterbindet und so eineindividuelle Steuerung ihrer Interaktionen ermöglicht.

Memento (Memento, siehe Abschnitt 5.6)

Erfassung und Externalisierung des internen Zustands eines Objekts, ohne des-sen Kapselung zu beeinträchtigen, so dass es später wieder in diesen Zustandzurückversetzt werden kann.

Observer (Beobachter, siehe Abschnitt 5.7)

Definition einer 1-zu-n-Abhängigkeit zwischen Objekten, damit im Fall einerZustandsänderung eines Objekts alle davon abhängigen Objekte entsprechendbenachrichtigt und automatisch aktualisiert werden.

State (Zustand, siehe Abschnitt 5.8)

Anpassung der Verhaltensweise eines Objekts im Fall einer internen Zustandsän-derung, so dass es den Anschein hat, als hätte es seine Klasse gewechselt.

Strategy (Strategie, siehe Abschnitt 5.9)

Definition einer Familie von einzeln gekapselten, austauschbaren Algorithmen.Das Design Pattern Strategy (Strategie) ermöglicht eine variable und von den Cli-ents unabhängige Nutzung des Algorithmus.

Template Method (Schablonenmethode, siehe Abschnitt 5.10)

Definition der Grundstruktur eines Algorithmus in einer Operation sowie Delega-tion einiger Ablaufschritte an Unterklassen. Das Design Pattern Template Method(Schablonenmethode) ermöglicht den Unterklassen, bestimmte Schritte eines Algo-rithmus zu überschreiben, ohne dessen grundlegende Struktur zu verändern.

Visitor (Besucher, siehe Abschnitt 5.11)

Darstellung einer auf die Elemente einer Objektstruktur auszuführenden Opera-tion. Das Design Pattern Visitor (Besucher) ermöglicht die Definition einer neuenOperation, ohne die Klassen der von ihr bearbeiteten Elemente zu verändern.

Page 6: Design-Patterns-Katalog...Design-Patterns-Katalog Erzeugungsmuster (Creational Patterns) Abstract Factory (Abstrakte Fabrik, siehe Abschnitt 3.1) Bereitstellung einer Schnittstelle

Notation für Klassendiagramme

Notation für Objektdiagramme

Notation für Interaktionsdiagramme

Page 7: Design-Patterns-Katalog...Design-Patterns-Katalog Erzeugungsmuster (Creational Patterns) Abstract Factory (Abstrakte Fabrik, siehe Abschnitt 3.1) Bereitstellung einer Schnittstelle

Beziehungen der Design Patterns

Page 8: Design-Patterns-Katalog...Design-Patterns-Katalog Erzeugungsmuster (Creational Patterns) Abstract Factory (Abstrakte Fabrik, siehe Abschnitt 3.1) Bereitstellung einer Schnittstelle
Page 9: Design-Patterns-Katalog...Design-Patterns-Katalog Erzeugungsmuster (Creational Patterns) Abstract Factory (Abstrakte Fabrik, siehe Abschnitt 3.1) Bereitstellung einer Schnittstelle

Design Patterns

Page 10: Design-Patterns-Katalog...Design-Patterns-Katalog Erzeugungsmuster (Creational Patterns) Abstract Factory (Abstrakte Fabrik, siehe Abschnitt 3.1) Bereitstellung einer Schnittstelle
Page 11: Design-Patterns-Katalog...Design-Patterns-Katalog Erzeugungsmuster (Creational Patterns) Abstract Factory (Abstrakte Fabrik, siehe Abschnitt 3.1) Bereitstellung einer Schnittstelle

Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides

Design Patterns

Entwurfsmuster als Elementewiederverwendbarer objektorientierter Software

Übersetzung aus dem Amerikanischenvon Maren Feilen und Knut Lorenzen

Page 12: Design-Patterns-Katalog...Design-Patterns-Katalog Erzeugungsmuster (Creational Patterns) Abstract Factory (Abstrakte Fabrik, siehe Abschnitt 3.1) Bereitstellung einer Schnittstelle

Bibliografische Information der Deutschen NationalbibliothekDie Deutsche Nationalbibliothek verzeichnet diese Publikation in der Deutschen Nationalbibliografie; detaillierte bibliografische Daten sind im Internet über <http://dnb.d-nb.de> abrufbar.

ISBN 978-3-8266-9903-01. Auflage 2015

www.mitp.deE-Mail: [email protected]: +49 7953 / 7189 - 079Telefax: +49 7953 / 7189 - 082

Authorized translation from the English language edition, entitled DESIGN PATTERNS: ELEMENTS OF REUSABLE OBJECT-ORIENTED SOFTWARE, 1st Edition, 0201633612 by GAMMA, ERICH; HELM, RICHARD, JOHNSON, RALPH; VLISSIDES, JOHN, published by Pearson Education, Inc, publishing as Addison-Wesley Professional, Copyright © 1995 by Addison-Wesley.

All rights reserved. No part of this book may be reproduced or transmitted in any form or by any means, electronic or mechanical, including photocopying, recording or by any informa-tion storage retrieval system, without permission from Pearson Education, Inc. GERMAN language edition published by mitp, an imprint of Verlagsgruppe Hüthig Jehle Rehm GmbH, Copyright © 2015.

© 2015 mitp Verlags GmbH & Co. KG

Dieses Werk, einschließlich aller seiner Teile, ist urheberrechtlich geschützt. Jede Verwertung außerhalb der engen Grenzen des Urheberrechtsgesetzes ist ohne Zustimmung des Verlages unzulässig und strafbar. Dies gilt insbesondere für Vervielfältigungen, Übersetzungen, Mikroverfilmungen und die Einspeicherung und Verarbeitung in elektronischen Systemen.

Die Wiedergabe von Gebrauchsnamen, Handelsnamen, Warenbezeichnungen usw. in diesem Werk berechtigt auch ohne besondere Kennzeichnung nicht zu der Annahme, dass solche Namen im Sinne der Warenzeichen- und Markenschutz-Gesetzgebung als frei zu betrachten wären und daher von jedermann benutzt werden dürften.

Lektorat: Sabine SchulzSprachkorrektorat: Maren Feilen, Knut Lorenzen Satz: III-satz, Husby, www.drei-satz.deCoverbild: © art_of_sun @ Fotolia.com

Page 13: Design-Patterns-Katalog...Design-Patterns-Katalog Erzeugungsmuster (Creational Patterns) Abstract Factory (Abstrakte Fabrik, siehe Abschnitt 3.1) Bereitstellung einer Schnittstelle

Für Karin – E.G.

Für Sylvie – R.H.

Für Faith – R.J.

Für Dru Ann und Matthew Josua 24:15b

– J.V.

Page 14: Design-Patterns-Katalog...Design-Patterns-Katalog Erzeugungsmuster (Creational Patterns) Abstract Factory (Abstrakte Fabrik, siehe Abschnitt 3.1) Bereitstellung einer Schnittstelle
Page 15: Design-Patterns-Katalog...Design-Patterns-Katalog Erzeugungsmuster (Creational Patterns) Abstract Factory (Abstrakte Fabrik, siehe Abschnitt 3.1) Bereitstellung einer Schnittstelle

Inhaltsverzeichnis

Vorwort. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17

Geleitwort von Grady Booch . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21

Einleitung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23

1 Einführung. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25

1.1 Was ist ein Design Pattern? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27

1.2 Design Patterns im Smalltalk MVC . . . . . . . . . . . . . . . . . . . . . . . . . . . 30

1.3 Beschreibung der Design Patterns . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32

1.4 Der Design-Patterns-Katalog . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34

1.5 Aufbau des Katalogs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38

1.6 Die Anwendung von Design Patterns zur Behebung von Designproblemen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41

1.6.1 Passende Objekte finden . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41

1.6.2 Objektgranularität bestimmen . . . . . . . . . . . . . . . . . . . . . . . . 42

1.6.3 Objektschnittstellen spezifizieren . . . . . . . . . . . . . . . . . . . . . . 42

1.6.4 Objektimplementierungen spezifizieren . . . . . . . . . . . . . . . . 44

1.6.5 Wiederverwendungsmechanismen einsetzen . . . . . . . . . . . . 49

1.6.6 Strukturen der Laufzeit und beim Kompilieren abstimmen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54

1.6.7 Designänderungen berücksichtigen . . . . . . . . . . . . . . . . . . . . 56

1.7 Auswahl eines Design Patterns . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63

1.8 Anwendung eines Design Patterns . . . . . . . . . . . . . . . . . . . . . . . . . . . 65

2 Fallstudie: Erstellung eines Texteditors . . . . . . . . . . . . . . . . . . . . . . . . 67

2.1 Designprobleme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67

2.2 Dokumentstruktur. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69

2.2.1 Rekursive Komposition . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71

2.2.2 Glyphen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72

2.2.3 Das Design Pattern Composite (Kompositum). . . . . . . . . . . . . 75

2.3 Formatierung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76

2.3.1 Kapselung des Formatierungsalgorithmus . . . . . . . . . . . . . . 76

2.3.2 Die Unterklassen Compositor und Composition . . . . . . . . . 77

2.3.3 Das Design Pattern Strategy (Strategie). . . . . . . . . . . . . . . . . . 79

13