Σε C++, βοηθούν στη βελτίωση της οργάνωσης κώδικα, επαναχρησιμοποίηση, και τη διατηρησιμότητα. Αυτό το άρθρο διερευνά πρακτικά παραδείγματα των λαϊκών σχεδίων και πώς μπορούν να εφαρμοστούν για την επίλυση των προβλημάτων του πραγματικού κόσμου.

Μοτίβο Singleton

Το μοτίβο Singleton εξασφαλίζει ότι μια κλάση έχει μόνο ένα παράδειγμα και παρέχει ένα παγκόσμιο σημείο πρόσβασης σε αυτό. Είναι χρήσιμο για τη διαχείριση κοινών πόρων, όπως ρυθμίσεις ρύθμισης ή συστήματα καταγραφής.

Παράδειγμα εφαρμογής:

Κωδικός:

```cpp κατηγορία Logger { ιδιωτικός: στατικός Logger* παράδειγμα; Logger() {} δημόσιος: στατικός Logger* getInstance() { if (! instance) { p.χ. = νέος Logger(; } instance; } widle log(const std::string& message) { // Log message }; Logger* Logger::instance = nullptr; ``

Μοτίβο μεθόδου εργοστασίων

Το μοτίβο της μεθόδου Εργοστάσιο ορίζει μια διεπαφή για τη δημιουργία αντικειμένων αλλά επιτρέπει σε υποκλάσεις να μεταβάλλουν τον τύπο των αντικειμένων που θα δημιουργηθούν.

Παράδειγμα σεναρίου: δημιουργία διαφορετικών τύπων εγγράφων.

Κωδικός:

'`' cpp class Document { public: virtual penid create() = 0; virtual ~Document() {}}; class PDFDocument : public Document { public: annid create() prepect { // create PDF document}; class WordDocument { nubility std:: unique ptr createDocument() = 0; virtual ~DocumentFactory() {} }; class PDFFactory : public DocumentFactory { public: std: unique ptr createDocument() perforcection { return std: make unique(); }; Wordestesttory: public Document { tumber: std: stanquet pt};

Μοτίβο παρατηρητών

Το πρότυπο Παρατηρητή καθιερώνει μια μονοπολλαπλή εξάρτηση μεταξύ των αντικειμένων έτσι ώστε όταν ένα αντικείμενο αλλάζει κατάσταση, όλα τα εξαρτημένα του να ειδοποιούνται αυτόματα.

Παράδειγμα: ένα απλό σύστημα γεγονότων όπου πολλοί παρατηρητές ανταποκρίνονται σε μια αλλαγή.

Κωδικός:

``cpp # include #clude class Observer { public: virtual άκυρη ενημέρωση() = 0; virtual ~Observer() {} }; class Subject { private: std::: vector observers; public: valid attend( Observer* observer) { observer.push back( observer; } annid annell annou announc() { for (auto* observer : observers) { observer-> update(; }; ```