Cenários de aplicação de padrões de design no desenvolvimento de software moderno


A aplicação de padrões de design no desenvolvimento de software moderno

introdução

Os padrões de projeto são uma prática excelente em engenharia de software para resolver problemas comuns em projeto de software. Os padrões de projeto não apenas fornecem uma prática de programação padrão, mas também ajudam a melhorar a legibilidade, a capacidade de manutenção e a escalabilidade do código. Este artigo apresentará detalhadamente vários padrões de design comumente usados ​​​​e conduzirá análises aprofundadas com base em cenários reais de aplicativos.

“Os padrões de design são os blocos de construção de um código elegante e sustentável.” - Robert C. Martin, “Código Limpo”

padrão criacional

Padrão Singleton

O padrão singleton é usado para garantir que uma classe tenha apenas uma instância e forneça um ponto de acesso global. Isso é útil em cenários como sistemas de log, gerenciadores de recursos, conjuntos de encadeamentos e conjuntos de memória.

// C++ 单例模式实现
class Singleton {
    
    
public:
    static Singleton& getInstance() {
    
    
        static Singleton instance;
        return instance;
    }
private:
    Singleton() {
    
    }
};

Padrão de fábrica

O padrão de fábrica é usado para criar objetos, que encapsula o processo de construção do objeto. Este modelo é aplicado no compilador do projeto open source NVDLA e passado no LLVM.

// C++ 工厂模式实现
class Factory {
    
    
public:
    static Product* createProduct(string type) {
    
    
        if (type == "A") return new ProductA();
        if (type == "B") return new ProductB();
        return nullptr;
    }
};

padrão estrutural

Padrão de adaptador

O modo adaptador é usado para conectar duas interfaces incompatíveis. A pilha e a fila de adaptadores de contêiner em STL são excelentes casos de uso para adaptadores de objeto.

// C++ 适配器模式实现
class Adapter : public Target, private Adaptee {
    
    
public:
    void request() override {
    
    
        specificRequest();
    }
};

Padrão de proxy

O padrão proxy é usado para fornecer um proxy para um objeto para controlar o acesso ao objeto original. Os ponteiros inteligentes e a contagem de referências do C++ são aplicações do padrão proxy.

// C++ 代理模式实现
class Proxy : public Subject {
    
    
public:
    void request() override {
    
    
        realSubject.request();
    }
private:
    RealSubject realSubject;
};

padrões comportamentais

Padrão Observador

O padrão Observer é usado para estabelecer uma relação de dependência um-para-muitos.Quando o estado de um objeto muda, todos os objetos que dependem dele serão notificados. O mecanismo de sinal e slot do Qt é uma aplicação do padrão observador.

// C++ 观察者模式实现
class Observer {
    
    
public:
    virtual void update(int value) = 0;
};

Padrão de Estratégia

O padrão de estratégia é usado para definir uma série de algoritmos e encapsular cada algoritmo para que possam ser substituídos entre si.

// C++ 策略模式实现
class Strategy {
    
    
public:
    virtual void algorithm() = 0;
};

Cenários de aplicação de padrões de design

• Modo Singleton: sistema de registro, gerenciador de recursos, pool de threads, pool de memória, etc.
• Modo fábrica: encapsulamento dos objetos criados, de acordo com o princípio de abertura e fechamento. O padrão de fábrica é amplamente utilizado em diversos projetos porque encapsula o processo de construção de objetos e torna a interface de criação de objetos unificada e concisa, por outro lado, obedece ao princípio de abertura e fechamento e é fácil de expandir. O estabelecimento de vários nós no compilador do projeto de código aberto NVDLA e a passagem no LLVM têm casos de uso em modo de fábrica.
• Padrão de adaptador: a pilha e a fila de adaptadores de contêiner em STL são excelentes casos de uso para adaptadores de objetos. Também é frequentemente usado no desenvolvimento de projetos.
• Padrão observador: usado com frequência, o padrão observador estabelece uma ligação um-para-muitos.Quando um objeto muda, ele notificará automaticamente outros objetos e outros objetos responderão. Atualização de mensagens, mecanismo de transmissão, entrega de mensagens, acionamento de cadeia... como o mecanismo de sinal e slot do Qt •
Modelo de cadeia de responsabilidade: Desacopla o remetente e o destinatário de uma solicitação, permitindo que vários objetos tenham a oportunidade de processar a solicitação. Conecte os objetos que recebem a solicitação em uma cadeia e passe a solicitação ao longo dessa cadeia até que um objeto possa tratá-la. Usar o modelo de cadeia de responsabilidade não apenas facilita a expansão (ao adicionar um destinatário, você só precisa inserir o método de processamento correspondente na posição apropriada na cadeia), mas também substitui o switch-case ou if-else que pode existir no código. O padrão de cadeia de responsabilidade pode ser aplicado no design de ferramentas e cenários de processamento de tarefas com relacionamentos hierárquicos ou de autoridade.
• Padrão de estratégia: Muitas vezes combinado com o padrão de fábrica para encapsular diferentes algoritmos (estratégias), combinado com o mecanismo polimórfico C++, o padrão de estratégia é amplamente utilizado no processo de desenvolvimento real.
• Modo proxy: ponteiros inteligentes C++, contagem de referências, etc.
• Modo composto: GUI

Padrão Construtor : Utilizado para separar as etapas de criação de objetos complexos para que um mesmo processo de construção possa criar representações diferentes. Por exemplo, crie um documento complexo, crie uma refeição complexa, etc.

Padrão Protótipo : usado para criar clones de objetos. O padrão de protótipo pode ser usado quando o custo de criação do objeto é alto ou o objeto tem muito estado compartilhado. Por exemplo, a implementação da cadeia de protótipos em JavaScript.

Bridge Pattern : Separa a abstração de sua implementação para que possam mudar de forma independente. Por exemplo, a interface entre o driver e o dispositivo ou diferentes drivers de banco de dados.

Padrão Decorador : Permite adicionar novas funcionalidades a um objeto existente sem alterar sua estrutura. Por exemplo, fluxo de E/S de Java, decoração de componentes GUI, etc.

Padrão Flyweight : Usado para reduzir o número de objetos criados para reduzir o uso de memória e melhorar o desempenho. Por exemplo, cache de objetos pequenos, pool de strings, etc.

Template Method Pattern : Define o esqueleto de um algoritmo em um método, mas adia algumas etapas para subclasses. As subclasses podem redefinir certas etapas sem alterar a estrutura do algoritmo. Por exemplo, etapas comuns para conexão de banco de dados, etapas comuns para algoritmos, etc.

Padrão de Comando : Encapsula a solicitação como um objeto, permitindo que os usuários usem diferentes solicitações, enfileiram solicitações ou registrem logs de solicitações, ao mesmo tempo em que suportam operações reversíveis. Por exemplo, botões GUI e itens de menu, funções de desfazer e refazer, etc.

Padrão Mediador : Reduz a comunicação direta entre objetos e faz com que eles dependam de um objeto mediador para comunicação. Por exemplo, salas de bate-papo, comunicação entre torres de aeronaves e aeronaves, etc.

Padrão Memento : Captura o estado interno de um objeto e salva esse estado fora do objeto sem destruir o encapsulamento. Dessa forma, você poderá restaurar posteriormente o objeto ao seu estado original salvo. Por exemplo, desfazer funções, salvar o estado do jogo, etc.

Padrão de Visitante : Adicione novas operações sem modificar classes existentes. Por exemplo, travessia da árvore de sintaxe do compilador, geração de relatórios, etc.

Resumir

Os padrões de projeto são ferramentas importantes no desenvolvimento de software porque fornecem maneiras elegantes de resolver problemas comuns. Ao usar padrões de design, podemos não apenas melhorar a qualidade do código, mas também melhorar a eficiência do desenvolvimento.

“Os programas devem ser escritos para as pessoas lerem e apenas incidentalmente para as máquinas executarem.” - Harold Abelson e Gerald Jay Sussman, “Estrutura e Interpretação de Programas de Computador”

Os padrões de design não são apenas a arte de programar, mas também a arte de pensar. Refletem as formas universais pelas quais as pessoas resolvem problemas e organizam sistemas complexos.

Espero que este artigo ajude você a entender e aplicar melhor os padrões de design.

“O aspecto mais importante do desenvolvimento de software é ser claro sobre o que você está tentando construir.'”

Em nossa jornada de aprendizagem de programação, a compreensão é um passo importante para avançarmos para um nível superior. No entanto, dominar novas habilidades e ideias sempre requer tempo e persistência. Do ponto de vista psicológico, a aprendizagem é muitas vezes acompanhada por constantes tentativas, erros e ajustes, que é como se o nosso cérebro otimizasse gradualmente o seu “algoritmo” para resolver problemas.

É por isso que, quando encontramos erros, devemos vê-los como oportunidades de aprender e melhorar, e não apenas como aborrecimentos. Ao compreender e resolver esses problemas, podemos não apenas corrigir o código atual, mas também melhorar nossas habilidades de programação e evitar cometer os mesmos erros em projetos futuros.

Encorajo todos a participarem ativamente e melhorarem continuamente suas habilidades de programação. Quer você seja um desenvolvedor iniciante ou experiente, espero que meu blog seja útil em sua jornada de aprendizado. Se você achar este artigo útil, clique para marcá-lo ou deixe seus comentários para compartilhar suas idéias e experiências. Você também pode fazer sugestões e perguntas sobre o conteúdo do meu blog. Cada curtida, comentário, compartilhamento e atenção é o maior apoio para mim e a motivação para continuar compartilhando e criando.


Leia minha página inicial da CSDN e desbloqueie mais conteúdo interessante: Página inicial da CSDN do Bubble
Insira a descrição da imagem aqui

Acho que você gosta

Origin blog.csdn.net/qq_21438461/article/details/132928245
Recomendado
Clasificación