Engineering Design und Analyse
Design Patterns in C++: Praktische Beispiele und Problemlösungsstrategien
Table of Contents
Design Patterns sind bewährte Lösungen für gängige Programmierprobleme. In C++ helfen sie, die Code-Organisation, Wiederverwendbarkeit und Wartbarkeit zu verbessern. Dieser Artikel untersucht praktische Beispiele für beliebte Design Patterns und wie sie angewendet werden können, um reale Probleme zu lösen.
Singleton-Muster
Das Singleton-Muster stellt sicher, dass eine Klasse nur eine Instanz hat und einen globalen Zugriffspunkt auf sie bietet.
Beispielhafte Umsetzung:
Code:
```cpp class Logger {privat: static Logger* instance; Logger() {} public: static Logger* getInstance() { if (!instance) { instance = new Logger(); } return instance; } void Log(const std::string& message) { // Log message } }; Logger* Logger::instance = nullptr; ```
Fabrikmethodemuster
Das Factory Method-Muster definiert eine Schnittstelle zum Erstellen von Objekten, erlaubt es Unterklassen jedoch, die Art der Objekte zu ändern, die erstellt werden sollen.
Beispielszenario: Erstellen verschiedener Arten von Dokumenten.
Code:
```cpp class Document {public: virtual void create() = 0; virtual ~Document() {} }; class PDFDocument : public Document {public: void create() override { // Create PDF document }; class WordDocument : public Document {public: void create() override { // Create Word document() override { // Create Word document }; class DocumentFactory {public: virtual std::unique ptr createDocument() = 0; virtual ~DocumentFactory() {} }; class PDFFactory : public DocumentFactory {public: std::unique ptr createDocument() override { return std::make unique(); } }; class WordFactory :public DocumentFactory {public: std::make ptr createDocument() override {public::make unique(); } } } : ```
Beobachtermuster
Das Beobachtermuster stellt eine Eins-zu-viele-Abhängigkeit zwischen Objekten her, so dass bei einem Objektwechsel automatisch alle abhängigen Personen benachrichtigt werden.
Beispiel: ein einfaches Ereignissystem, bei dem mehrere Beobachter auf eine Änderung reagieren.
Code:
```cpp #include #include class Observer {public: virtual void update() = 0; virtual ~Observer() {} }; class Subject {privat: std::vector observer; public: void Attachment(Observer* observer) { observer.push back(observer); } void notification() {for (auto* observer : observer) { observer->update(); } } } } ```