※ patrón de diseño ※ → ☆ ☆ ============ decorador modelo estructural Mode (IX)

modo de vista general

En el diseño de componentes de software, si la división de responsabilidades no está claro, los resultados se obtienen a menudo mediante el uso de herencia como cambios en la demanda, la rápida expansión de las sub-categorías, mientras que llena de código duplicado, esta vez es la clave para llamar la responsabilidad. Un modelo típico representa: decorador , Puente

Puente principal es lograr la separación y la abstracción, de modo que cuando es necesario cambiar las dos clases separadas de comportamiento y atributos de él, el modo de puente se puede utilizar para lograr las propiedades en la abstracción, para lograr un comportamiento en la realización del cuerpo, a fin de lograr las propiedades y el comportamiento lata cambios independientes, a través de un puente (es decir, ellos vinculantes, escondidos en una clase abstracta) entre su manera de estar asociados, y la relación de este puente está destinado a ser cambiado dinámicamente, que se compara con la herencia máximo ventaja, a veces también se puede interpretar como una evolución del modelo de agencia, el comportamiento de los agentes con el comportamiento de las diferentes clases de implementación de tratar.

※ patrones de diseño ※ → ☆ ☆ ============ puente modo de modelo estructural (siete)

Por encima del puente modo, el tipo de equipo (resumen) y los fabricantes de ordenadores (entidad) a través de un puente (es decir, se unen a ambos escondido en una clase abstracta) de la manera para conseguir las propiedades y el comportamiento puede variar de forma independiente.

Por ejemplo, un ejemplo clásico del café: una taza de café, por ejemplo, hay vasos y tazas en los puntos, así como la leche sin los puntos extra de leche si una herencia simple, estos cuatro aplicación específica (taza de la leche. no hay leche) entre los conceptos se solapan porque hay taza de leche, sino también en la taza sin leche, si este nivel de nuevo en la copa y luego implementar dos heredado, es evidente que la confusión, falta de escalabilidad. entonces el modo de puente utilizado para implementarlo. taza / taza (resumen) y la leche / sin leche (sólido).

        Decorador patrón aplicado a la jerarquía de herencia subclase es demasiado profunda, la herencia puede ser muy inteligente para reducir el número de capas, y eficaz en la reducción de la cantidad de código necesario para implementar la función, sin duda es un pensamiento arma OO. Cuando es necesario añadir nuevas operaciones a una clase, se utilizó para practicar tales como la clase padre, entonces heredar una subclase, la aplicación tendrá que poner subclase. Sin embargo, esto traerá un problema cuando tenemos que funcionan como avanza el proyecto aumenta gradualmente, tenemos varios elementos para cada operación adicional, que heredan una subclase, en cierta medida, cuando nos encontramos con que el número de capas heredará profundidad tendría precedentes, y la clase base abstracta para lograr polimorfismo, la necesidad de añadir una función virtual pura para cada operación. Problemas similares, Decorator da una buena solución, en una clase base abstracta, vamos a ver cómo las funciones virtuales menos.

 

Decorador de patrón a un objeto añadir dinámicamente algunas responsabilidades adicionales. Aumenta funcionalmente, Decorator compararon subclases más flexible. Bajo la premisa de no cambiar la interfaz, mejorar el rendimiento de la clase considerada.

  •     1) la necesidad de ampliar la funcionalidad de una clase o de una clase para agregar responsabilidades adicionales.
  •     2) para añadir dinámicamente funcionalidad a un objeto, estas funciones pueden ser dinámicamente re revocada.
  •     3) la necesidad de aumentar el número de permutaciones y combinaciones de las funciones básicas generados muy gran número de características, de modo que la herencia poco práctico.

 

Decorador patrón compuesto de las siguientes funciones

  •     Resumen de componentes (Componente) Función: dada una interfaz abstracta para regular lista para recibir responsabilidades adicionales.
  •     miembro DETALLADA (ConcreteComponent) Roles: definir la responsabilidad de ser recibida clase adicional
  •     papel decorativo (decorador): un elemento de sujeción del objeto (Componente) Ejemplos y definir una interfaz consistente a la interfaz con el componente de extracto
  •     papel decorativo específico (ConcreteDecorator): responsable de objetos componentes "marcado" responsabilidad adicional
     

 

estructura de modos

descripción de la modalidad

Decorador patrón usado en algunos casos puede ser "herencia uso excesivo de expandir la función de objeto", como la base para la introducción de tipo estático sobre todo, hace que esta inflexible modo extendido, y con el aumento de la subclase ( extensiones de aumento), la combinación (la combinación de extensiones) de cada subclase puede causar inflamación de las diferentes subclases.

  • En algunos casos es posible que "herencia uso excesivo de extender la función de objeto", debido a la naturaleza estática de la herencia para el tipo introducido, haciendo de este modo de expansión inflexible; y con el aumento (extensión del aumento subclase ), la combinación (la combinación de extensiones) de varias subclases resultados en más subclase de expansión. Que tenemos que encontrar una manera de lograr la funcionalidad se extiende por la no herencia, pero la interfaz no cambia las clases se llevan a cabo.
  • Como hacer "Funciones de los objetos de extensión" se puede lograr de forma dinámica según sea necesario? Evitando al mismo tiempo la "funcionalidad extendida de aumento," problemas de expansión subclase causados? De modo que cualquier "funcional
    expansión y cambio" causada por el impacto será mínimo.

De acuerdo con lo anterior, podemos ver el patrón decorador tiene los siguientes puntos principales

  • 1. Mediante el uso de una combinación de técnicas no son heredados, el patrón Decorator para lograr la capacidad de extender dinámicamente funciones del objeto en tiempo de ejecución, y pueden necesitar ser ampliado de acuerdo con una pluralidad de funciones. Evitar el uso de la herencia causada por "inflexibles" y "ramificaciones múltiples subclase".
  • rendimiento 2.Decorator de la relación de herencia de clases interfaz es un componente, hereda de la clase es decir decorador la clase de componente tiene una interfaz. Pero en relación implementado como una combinación de rendimiento y tiene-un componente, es decir, decorador a su vez utiliza otra clase de componentes.
  • 3.Decorator modelo de objetos no resuelve el "multi-palabra clase derivada herencia múltiple" problemas, la esencia de aplicación de modo decorador es resolver el "extensión de clase principal en múltiples direcciones" (obviamente archivo, la red y el cifrado, son dos búfer dirección extendida) - es un medio "decorativos".

Decorador y Puente de la diferencia

Decorador es una mejora de la funcionalidad existente, son decorativos y funcionales gira en torno a la decoración de la clase existente es, y no importa cómo el cambio decorativo, tiene que haber un cambio en torno a la clase decorada (o alrededor de las dos de interfaz común cambio), ya que para el cliente, llamando a un objeto decorativo antes y después debe ser el mismo.

el modo de puente se separa del comportamiento del objeto que salvar (resumen) y hacia fuera en la clase de implementación completa para implementar el comportamiento lograr objeto puenteado menos restringido, por lo que si esta restricción es necesario, se puede usando el modo decorador, se pueden emplear el modo de puente y viceversa

 

Diferencia decorador, Puente, adaptador de

  • Adaptador : las dos clases incompatibles juntarán con el (desarrollo posterior al proyecto compatibles)
  • Puente : resumen y de comportamiento división abierta, independiente, pero de forma dinámica puede vinculante (el desarrollo de los primeros proyectos en el diseño)
  • Decorador : dinámico a un objeto para añadir algunas responsabilidades adicionales (proyecto de desarrollo posterior mantenimiento)

Con el fin de mejorar la comprensión, sigo el uso de un ordenador [miembros] (ordenadores de sobremesa, portátiles, servidores), los fabricantes [papel] (ASUS, Dell, HP) para manejar el caso. Ya se trate de un tipo de equipo de cambio o los cambios en los proveedores. Una vez que el cambio de las necesidades de una subclase de rápida expansión, mientras que llena de código duplicado, la clave es llamar la responsabilidad.

Puente : Al combinar el tipo de ordenador (resumen) y los fabricantes de ordenadores de modo (entidad), un 3 * 3 clase de entidad clase abstracta puede expresarse nueve tipos de combinaciones de ordenadores. Pero no se puede fabricantes de ordenadores (entidades) se mezclan, por ejemplo: en función del ordenador tanto ASUS, HP otra función.

El decorador : funciones add por tipo de equipo (miembro) y los fabricantes de ordenadores (carácter) forma, el papel de la clase 3 + XX miembros pueden aparecer en combinación varios tipos de ordenadores. + Función de escritorio ASUS, escritorio función de las funciones + + ASUS DELL. En comparación Puente condiciones más flexibles.

Puede verse en el diagrama de UML, si el derecho está limitado a conseguir el objeto encuadernado a la izquierda es necesario, se puede emplear el modo decorador, se pueden emplear el modo de puente y viceversa

 

Por último, no importa cuán privilegiada modo, pero también tenemos que considerar cuidadosamente la situación real.

 

implementación de patrones

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
después de notas Xiao Ting serán lo más detallado posible explicar un poco de conocimiento, espero que seguirá centrándose en mi blog.
En esta sección se señala al final aquí.

Xiao Ting tendrá tiempo para poner su experiencia de aprendizaje, se sienta mejor conocimiento para escribir y compartir con todo el mundo.
Programación de desarrollo de la carretera es muy larga, muy parecido a poder compartir juntos, aprender juntos, y el progreso común.
Si tiene cualquier lugar artículos de supervisión, por favor, corríjanme. Te espero y puedo ser más comentarios para discutir temas relacionados con la programación.
Por último, gracias por su apoyo ~~~ sido

       C ++ completo ejemplo de código (el código bajo prueba se puede ejecutar en VS2017)
códigos e información relacionada Descarga:
              https://gitee.com/arvinxt/DesignPattern

Publicados 170 artículos originales · ganado elogios 207 · Vistas 4,59 millones +

Supongo que te gusta

Origin blog.csdn.net/xiaoting451292510/article/details/103569917
Recomendado
Clasificación