Table of Contents
Designmønstre er bevist løsninger på vanlige programmeringsproblemer. I C++ bidrar de til å forbedre kodeorganisasjonen, gjenbrukbarheten og vedlikeholdsevnen. Denne artikkelen utforsker praktiske eksempler på populære designmønstre og hvordan de kan brukes til å løse virkelige problemer.
Singleton mønster
Singleton-mønsteret sikrer at en klasse har bare én instans og gir et globalt punkt for tilgang til den. Det er nyttig for å administrere felles ressurser som konfigurasjon innstillinger eller loggesystemer.
Eksempel implementasjon:
Kode:
```cpp class Logger { privat: static Logger* executive; Logger() {} offentlig: static Logger* getInstance() { if (!instance) { executive = new Logger(); } returinstans; } tomrom log(const std:::string& melding) { // Loggmelding } }; Logger* Logger* Logger:::instrument = nullptr; `````
Fabrikkmetodemønster
Fabrikkmetodemønsteret definerer et grensesnitt for å opprette objekter, men tillater underklasser å endre typen objekter som vil bli opprettet. Det fremmer løs kobling og skalerbarhet.
Eksempelscenario: å opprette ulike typer dokumenter.
Kode:
```cpp class Document { public: virtual tomspace create() = 0; virtual ~ Document() {}}; class PDFDocument : public Document { public: unicated document }}; class WordDocument : public Document { public: unique ptr createDocument() = 0; virtual ~ DocumentFactory() {}}; class PDFFactory : public DocumentFactory { public: std:::unique ptr createDocument() overstyr { return std:: make unique(); }; class WordFactory : Public DocumentFactory { public: std:unique ptr createDocument() overstyr {: make unique(); }; ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` `
Observer-mønster
Observer-mønsteret etablerer en en-til-mange avhengighet mellom objekter slik at når ett objekt endrer tilstand, alle dens avhengige blir varslet automatisk. Det er nyttig for å implementere hendelseshåndteringssystemer.
Eksempel: Et enkelt hendelsessystem der flere observatører reagerer på en endring.
Kode:
```cpp #inkluderer #inkluderer klasse Observer { offentlig: virtual tomrum update() = 0; virtual ~ Observator() {} }; klasseemne { privat: SD:::vector observatører; offentlig: ugyldig vedlegg(observator* observatør) { observatories.push back(observer); } ugyldigvarsel() { for (auto* observatør : observatører) { observatør->update(); } }; ````