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(); } } } } ```