Design Patterns Flashcards
explain Strategy Pattern
Löst Problem der “Kreuzvererbung”, also wenn verschiedene Childklassen eine unterschiedliche Zusammensetzung von Methoden benötigen und dadurch Kreuzungen im Vererbungsbaum entstehen würden.
Wie? Für verschiedene Behaviors (z.B. Flying) eines Objekts (z.B. Duck) werden Interfaces (z.B. IFlyingBehavior) (=abstrakte Klassen mit true virtual methoden) erzeugt. Von diesen Erben jeweils Klassen für bestimmte Instanzen des Behaviors (z.B. JetFlyingBehavior). Bei der Erstellung einer Instanz werden Pointer auf die benötigten Behavior dem Konstruktor mitgegeben, der diese als Member übernimmt.
Um eine neue Variante des Objekts zu erzeugen können so einfach neue Strategien (Behavior) als Childklasse des entsrpechenden Interfaces implementiert werden und ein entsprechendes Objekt instanziiert werden.
explain Observer Pattern
Das OBserver Pattern lässt sich benutzen, wenn ein oder mehrere Observer(z.B. Display) ein Observable (z.B. Wetterstation) beobachten und über Statusänderung informiert werden wollen. Dafür wird ein Observer-Interface mit der methode update() eingerichtet, sowie ein Observable-Interface mit den methoden add(), remove() und notify(). Über add() und remove() wird eine Liste der zuhörenden Observer verwaltet. Ändert sich das Observable, werden diese über notify() informiert und deren update() aufgerufen. Die Observer müssen mit einem Observable konstruiert werden, damit sie auf diesen in update() zugreifen können.
explain Decorator Pattern
Mit dem Decorator Pattern können Objekte (z.B Getränke in einem Laden) um bestimmte Eigenschaften ergänzt bzw. Erweitert werden. Dafür wird das ursprüngliche Objekt in ein Weiteres, den Decorator, gewrappt, das nach außen hin die gleiche Schnittstelle hat, aber eine zusätzliche Ergänzung hinzufügt (z.B. Topping). Der Decorator bekommt zur Construction das ursprüngliche Objekt übergeben und ruft dieses bei Bedarf auf. Dieser Aufbau kann beliebig kaskadiert werden. Dadurch können Objekte während der runtime ergänzt werden.
Vor Allem sinnvoll bei möglichst unterschiedlich-artigen Ergänzungen
explain Command Pattern
Bestimmte Commands, die zwischen Programmteilen verschickt werden werden hier auch als Objekte instanziiert (und nicht als Funktionsaufrufe o.ä.). Dadurch können diese gespeichert, rückgängig gemacht, weitergereicht, … werden. Bei dem Setup wird ein Invokerobjekt mit verschiedenen Commands konstruiert, die von der ICommand-Klasse Erben. Diese wird mit einem Zielobjekt instanziiert und enthält execute() und unexecute() methoden, die jeweils Methoden des Zielobjekts ausführen. Der Invoker kann über stacks, queues, etc. verschiedene Dinge mit der Command-History anstellen
explain Template Method Pattern
The Template Method pattern suggests that you break down an algorithm into a series of steps, turn these steps into methods, and put a series of calls to these methods inside a single template method. The steps may either be abstract, or have some default implementation. To use the algorithm, the client is supposed to provide its own subclass, implement all abstract steps, and override some of the optional ones if needed (but not the template method itself).
Explain Factory Method Pattern
A Factory handles the creation of objects. Implementation:
There is a product interface, with several child classes.
Also, there is a Factory interface, with a virtual method createProduct() of return type Product (or other name) and possibly some additional code. The child classes of the Factory class implement the creation of specific subclasses of the interface product.
Explain Facade Pattern
The Facade is a class, that handles calls to third party code. It implements only the functions, which are used by your software and acts as a single entry point to that code. Thus only the facade needs to be changed when third party code changes and the rest of your code doesn’t need to know anything about the workings of the third party code
Explain Adapter Pattern
An Adapter converts the interface of an object in order to be used by other objects, by wrapping said object. The object is not even aware of the Adapter, communicating with it only through it’s interface. It can be used to match different objects without changing their implementation
What is the difference between Adapter and Facade Pattern?
A Facade interacts with third party code, while an Adapter does so with own code. Also, A Facade works with an entire subsystem, while an Adapter only interacts with one object
What kind of design patterns are there?
creational
structural
behavioral
What 5 creational design patterns are there?
Factory Method
Abstract Factory
Prototype
Builder
Singleton
What is the prototype design pattern?
Prototype pattern Implements a prototype interface with a clone() method. This copies an entire object with all it’s fields. Calling it does not require knowledge of which exact type the copied instance is.
explain builder pattern
When constructing complicated objects, there are two bad solutions: large constructor or many subclasses.
Instead it is better to create builder classes, that handle the build of different versions of the object through it’s methods. One can also create a director class, that manages the builders, if calling it’s methods gets too complicated.