Os padrões de design são soluções comprovadas para problemas de programação comuns. Em C++, eles ajudam a melhorar a organização, a reutilização e a manutenção de códigos. Este artigo explora exemplos práticos de padrões de design populares e como eles podem ser aplicados para resolver problemas do mundo real.

Padrão de um único tonelada

O padrão Singleton garante que uma classe tenha apenas uma instância e forneça um ponto global de acesso a ela. É útil para gerenciar recursos compartilhados, como configurações de configuração ou sistemas de registro.

Implementação de exemplo:

Código:]

```cpp class Logger { private: static Logger* instance; Logger () {} public: static Logger* getInstance() { if (!instance) { instance = new Logger(); } return instance; } void log( const std::string& amp; message) { // Log message } }; Logger* Logger::instance = nullptr; ``

Padrão do Método de Fábrica

O padrão Método de Fábrica define uma interface para criar objetos, mas permite que subclasses alterem o tipo de objetos que serão criados. Ele promove acoplamento solto e escalabilidade.

Cenário de exemplo: criar diferentes tipos de documentos.

Código:]

```cpp class Document { public: virtual void create() = 0; virtual ~Document() {} }; class PDFDocument : public Document { public: void create() active { // Create PDF document }; class WordDocument : public Document { public: void create() active { // Create Word document }; class DocumentFactory { public: unique ptr createDocument() active::unique ptr acryDocument() acry::make unique(); }; class WordFactory : public Document Factory { public: std::unique ptr createDocument() acry { return std:::make unique(); } }; ````

Padrão de Observador

O padrão Observer estabelece uma dependência de um a muitos entre objetos de modo que quando um objeto muda de estado, todos os seus dependentes são notificados automaticamente. É útil para implementar sistemas de manipulação de eventos.

Exemplo: um sistema de eventos simples onde vários observadores respondem a uma mudança.

Código:]

```cpp # include # include Observador de classe { public: virtual void update() = 0; virtual ~Observer( {} }; classe Assunto { privado: std::vector observators; public: void attach(Observer* observador) { observator.push back(observador); } void notifit() { para (auto* observador: observadores) { observador-> actualização(); } } } }; ``