Escenarios de aplicación de patrones de diseño en el desarrollo de software moderno.


La aplicación de patrones de diseño en el desarrollo de software moderno.

introducción

Los patrones de diseño son una excelente práctica en ingeniería de software para resolver problemas comunes en el diseño de software. Los patrones de diseño no sólo proporcionan una práctica de programación estándar, sino que también ayudan a mejorar la legibilidad, el mantenimiento y la escalabilidad del código. Este artículo presentará en detalle varios patrones de diseño de uso común y realizará un análisis en profundidad basado en escenarios de aplicaciones reales.

"Los patrones de diseño son los componentes básicos de un código elegante y fácil de mantener". — Robert C. Martin, “Código limpio”

patrón creacional

Patrón singleton

El patrón singleton se utiliza para garantizar que una clase tenga solo una instancia y proporcione un punto de acceso global. Esto es útil en escenarios como sistemas de registro, administradores de recursos, grupos de subprocesos y grupos de memoria.

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

Patrón de fábrica

El patrón de fábrica se utiliza para crear objetos y encapsula el proceso de construcción del objeto. Este modelo se aplica en el compilador del proyecto de código abierto NVDLA y el pase en LLVM.

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

patrón estructural

Patrón de adaptador

El modo adaptador se utiliza para conectar dos interfaces incompatibles. La pila y la cola de adaptadores de contenedor en STL son excelentes casos de uso para adaptadores de objetos.

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

Patrón de proxy

El patrón de proxy se utiliza para proporcionar un proxy para que un objeto controle el acceso al objeto original. Los punteros inteligentes y el recuento de referencias de C++ son aplicaciones del patrón proxy.

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

patrones de comportamiento

Patrón de observador

El patrón Observer se utiliza para establecer una relación de dependencia de uno a muchos. Cuando el estado de un objeto cambia, se notificará a todos los objetos que dependen de él. El mecanismo de señal y ranura de Qt es una aplicación del patrón de observador.

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

Patrón de estrategia

El patrón de estrategia se utiliza para definir una serie de algoritmos y encapsular cada algoritmo para que puedan reemplazarse entre sí.

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

Escenarios de aplicación de patrones de diseño.

• Modo singleton: sistema de registro, administrador de recursos, grupo de subprocesos, grupo de memoria, etc.
• Modo fábrica: encapsulación de objetos creados, de acuerdo con el principio de apertura y cierre. El patrón de fábrica se usa ampliamente en muchos proyectos porque encapsula el proceso de construcción de objetos y hace que la interfaz para crear objetos sea unificada y concisa, por otro lado, se ajusta al principio de apertura y cierre y es fácil de expandir. El establecimiento de varios nodos en el compilador del proyecto de código abierto NVDLA y el paso en LLVM tienen casos de uso en modo de fábrica.
• Patrón de adaptador: la pila y la cola de adaptadores de contenedor en STL son excelentes casos de uso para adaptadores de objetos. También se utiliza a menudo en el desarrollo de proyectos.
• Patrón de observador: utilizado con frecuencia, el patrón de observador establece un vínculo de uno a muchos. Cuando un objeto cambia, notificará automáticamente a otros objetos y otros objetos responderán. Actualización de mensajes, mecanismo de transmisión, entrega de mensajes, activación de cadenas... como la señal de Qt y el mecanismo de ranura.
• Modelo de cadena de responsabilidad: desacople el remitente y el receptor de una solicitud, permitiendo que múltiples objetos tengan la oportunidad de procesar la solicitud. Conecte los objetos que reciben la solicitud en una cadena y pase la solicitud a lo largo de esta cadena hasta que un objeto pueda manejarla. El uso del modelo de cadena de responsabilidad no solo facilita la expansión (al agregar un destinatario, solo necesita insertar el método de procesamiento correspondiente en la posición apropiada de la cadena), sino que también reemplaza el switch-case o if-else que pueda existir en el código. El patrón de cadena de responsabilidad se puede aplicar en el diseño de herramientas y escenarios de procesamiento de tareas con relaciones jerárquicas o relaciones de autoridad.
• Patrón de estrategia: a menudo combinado con el patrón de fábrica para encapsular diferentes algoritmos (estrategias), combinado con el mecanismo polimórfico de C++, el patrón de estrategia se usa ampliamente en el proceso de desarrollo real.
• Modo proxy: punteros inteligentes de C++, recuento de referencias, etc.
• Modo compuesto: GUI

Patrón de construcción : Se utiliza para separar los pasos de creación de objetos complejos para que el mismo proceso de construcción pueda crear diferentes representaciones. Por ejemplo, cree un documento complejo, cree una comida compleja, etc.

Patrón prototipo : se utiliza para crear clones de objetos. El patrón prototipo se puede utilizar cuando el costo de creación del objeto es alto o el objeto tiene muchos estados compartidos. Por ejemplo, la implementación de una cadena de prototipos en JavaScript.

Patrón Puente : Separa la abstracción de su implementación para que puedan cambiar de forma independiente. Por ejemplo, la interfaz entre el controlador y el dispositivo, o diferentes controladores de bases de datos.

Patrón decorador : permite agregar nuevas funciones a un objeto existente sin cambiar su estructura. Por ejemplo, flujo de E/S de Java, decoración de componentes GUI, etc.

Patrón Flyweight : Se utiliza para reducir el número de objetos creados para reducir el uso de memoria y mejorar el rendimiento. Por ejemplo, caché de objetos pequeños, grupo de cadenas, etc.

Patrón de método de plantilla : define el esqueleto de un algoritmo en un método, pero difiere algunos pasos a subclases. Las subclases pueden redefinir ciertos pasos sin cambiar la estructura del algoritmo. Por ejemplo, pasos comunes para la conexión de bases de datos, pasos comunes para algoritmos, etc.

Patrón de comando : encapsula la solicitud como un objeto, lo que permite a los usuarios utilizar diferentes solicitudes, poner en cola solicitudes o registrar registros de solicitudes, al mismo tiempo que admite operaciones reversibles. Por ejemplo, botones GUI y elementos de menú, funciones de deshacer y rehacer, etc.

Patrón Mediador : Reducir la comunicación directa entre objetos y hacer que dependan de un objeto mediador para la comunicación. Por ejemplo, salas de chat, comunicación entre torres de aviones y aviones, etc.

Patrón Memento : captura el estado interno de un objeto y guarda este estado fuera del objeto sin destruir la encapsulación. De esta manera, posteriormente podrá restaurar el objeto a su estado original guardado. Por ejemplo, deshacer funciones, guardar el estado del juego, etc.

Patrón de visitante : agregue nuevas operaciones sin modificar las clases existentes. Por ejemplo, recorrido del árbol de sintaxis del compilador, generación de informes, etc.

Resumir

Los patrones de diseño son herramientas importantes en el desarrollo de software porque proporcionan formas elegantes de resolver problemas comunes. Al utilizar patrones de diseño, no solo podemos mejorar la calidad del código, sino también la eficiencia del desarrollo.

"Los programas deben escribirse para que las personas los lean y, sólo incidentalmente, para que las máquinas los ejecuten". — Harold Abelson y Gerald Jay Sussman, “Estructura e interpretación de programas informáticos”

Los patrones de diseño no son sólo el arte de programar, sino también el arte de pensar. Reflejan las formas universales en que las personas resuelven problemas y organizan sistemas complejos.

Espero que este artículo le ayude a comprender y aplicar mejor los patrones de diseño.

“正如Bjarne Stroustrup在《The C++ Programming Language》中所说:'El aspecto más importante del desarrollo de software es tener claro lo que se intenta construir'”.

En nuestro viaje de aprendizaje de programación, la comprensión es un paso importante para avanzar a un nivel superior. Sin embargo, dominar nuevas habilidades e ideas siempre requiere tiempo y perseverancia. Desde un punto de vista psicológico, el aprendizaje suele ir acompañado de constantes pruebas, errores y ajustes, que es como si nuestro cerebro optimizara gradualmente su "algoritmo" para resolver problemas.

Por eso, cuando nos topamos con errores, debemos verlos como oportunidades para aprender y mejorar, no sólo como molestias. Al comprender y resolver estos problemas, no solo podemos corregir el código actual, sino también mejorar nuestras habilidades de programación y evitar cometer los mismos errores en proyectos futuros.

Animo a todos a participar activamente y mejorar continuamente sus habilidades de programación. Ya sea un principiante o un desarrollador experimentado, espero que mi blog sea útil en su viaje de aprendizaje. Si encuentra útil este artículo, puede hacer clic para marcarlo como favorito o dejar sus comentarios para compartir sus ideas y experiencias. También puede hacer sugerencias y preguntas sobre el contenido de mi blog. Cada me gusta, comentario, compartir y atención es el mayor apoyo para mí y la motivación para seguir compartiendo y creando.


Lea mi página de inicio de CSDN y desbloquee contenido más interesante: página de inicio de CSDN de Bubble
Insertar descripción de la imagen aquí

Supongo que te gusta

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