de modo de patrón de diseño decorativo (el decorador) y código de ejemplos detallados

La definición de un patrón decorativo

  (El decorador) Modo decorativo definido: se refiere a la estructura del objeto sin cambiar la situación existente, el objeto dinámico es aumentar el número de funciones (es decir, aumentar su función adicional) modo, que pertenece al esquema de estructura del objeto.

En segundo lugar, las ventajas y desventajas de los patrones decorativos

  La ventaja del modo de decoración (decorador) son:

  • Decoradas extensiones de esquema de objetos funcionan más flexible que el uso de la herencia.
  • Usted puede diseñar un número de diferentes concreto decorativo, creando una combinación de varios comportamientos diferentes.

  Las principales desventajas son:

  patrón decorativo aumentó el número de sub-categorías, si los procedimientos usados ​​en exceso será muy complicado.

En tercer lugar, para lograr patrón decorativo

  Típicamente, una clase de ampliar la funcionalidad se implementa mediante herencia. Hereda pero tener características estáticas, alta de acoplamiento, y con el aumento de la extensión, se expande subclases. Si se utiliza una combinación de relaciones para crear un objeto contenedor (es decir, objetos decorativos) para envolver el objeto real, y de acuerdo al objeto real sin necesidad de cambiar la estructura de clases, que proporciona una funcionalidad adicional, que es el objetivo de los patrones decorativos. Para analizar la siguiente estructura e implementación básica.

  patrón decorativo incluye principalmente las siguientes funciones.

  • componente Abstract (Componente) Roles: definir una interfaz abstracta para regular un objeto listo para recibir responsabilidades adicionales.
  • Los componentes específicos (componente de hormigón): papel para lograr componentes abstractos, añadir algunas de sus responsabilidades por el papel decorativo.
  • Decorativo abstracto (el decorador) Función: heredar el miembro abstracta, e incluye ejemplos de miembro específico, la función miembro específico puede ser ampliado por sus subclases.
  • Decoración específica (ConcreteDecorator) Función: método de decoración abstracta dependiente de la implementación, y añadir nuevas responsabilidades a los objetos miembros específicos.

  configuración patrón decorativo figura como se muestra:

            

  Vamos a echar un vistazo a nuestro nuevo camino a través de las propiedades de herencia de esta implementación, como este ejemplo se utiliza panqueques, fruta, el código es el siguiente:

/ ** 
 * panqueques 
 * / 
público  de clase battercake {
     protegida cadena getDesc () {
         retorno "pancake" ; 
    } 
    protegida  int coste () {
         retorno 8. ; 
    } 
} 

/ ** 
 * panqueques y huevos 
 * / 
público  de clase BattercakeWithEgg la extiende battercake { 
    @ Override 
    pública getDesc String () {
         retorno  Súper .getDesc () + "añadir un huevo" ; 
    } 

    @ Override 
    pública  int coste () {
        retorno  de Super .cost () + 1. ; 
    } 
} 

/ ** 
 panqueque de salchichas y huevos * 
 * / 
público  de clase BattercakeWithEggSausage la extiende BattercakeWithEgg { 
    @ Override 
    pública Cadena getDesc () {
         retorno  Súper .getDesc () + "además de una salchicha" ; 
    } 

    @ Override 
    pública  int coste () {
         retorno  Súper .cost () + 2 ; 
    } 
} 

pública  clase Test {
     pública  estática  vacío = main (String [] args) {
        Battercake battercake nuevo battercake (); 
        System.out.println (battercake.getDesc () + "销售价格:" + battercake.cost ()); 

        Battercake battercakeWithEgg = nuevo BattercakeWithEgg (); 
        System.out.println (battercakeWithEgg.getDesc () + "销售价格:" + battercakeWithEgg.cost ()); 

        Battercake battercakeWithEggSausage = nuevo BattercakeWithEggSausage (); 
        System.out.println (battercakeWithEggSausage.getDesc () + "销售价格:" + battercakeWithEggSausage.cost ()); 
    } 
}

  Por último, los resultados de la prueba:

Panqueques Precio de venta: 8 
panqueques, además de un precio de venta de huevo: 9 
panqueques además de huevos, además de un precio de venta de salchichas: 11

  Si bien nos damos cuenta de la clase de extensiones, pero junto con la alta herencia, y si la nueva clase aumentaría indefinidamente, si modifica la clase original, un gran impacto en la parte trasera de la clase, por lo que si utiliza patrones decorativos, de la siguiente manera:

público  clase DecoratorPattern 
{ 
    público  estáticas  void principales (String [] args) 
    { 
        el Componente P = nuevo nuevo ConcreteComponent (); 
        p.operation (); 
        System.out.println ( "-------------- ------------------- " ); 
        el componente D = nueva nueva ConcreteDecorator (P); 
        d.operation (); 
    } 
} 
// abstracta papel componente de interfaz de componente { público vacío Operación (); }
// papel específico miembro de la clase ConcreteComponentlos implementos El componente { público ConcreteComponent () { System.out.println ( "Papel crear componentes específicos" ); } pública vacío Operación () { System.out.println ( "miembro de función de llamada específica del método de operación ()" ); } }
// abstracta carácter decorativo clase del decorador de los implementos el componente { privado del Componente Componente; públicas del decorador (el componente Componente) { el presente .Componente = componente; } pública vacío Operación () { component.operation (); } }
// DETALLADA carácter decorativo clase ConcreteDecorator la extiende el decorador { público ConcreteDecorator (el componente Componente) { super (Componente); } pública vacío Operación () { super .operation (); addedFunction ( ); } pública vacío addedFunction () { System.out.println ( "addedFunction características adicionales para un papel de miembro en particular ()" ); } }

Escena del uso de cuatro, los patrones decorativos

  La estructura y características de la explicación anterior sobre el patrón decorativo, se describe a continuación sus escenarios de aplicación, el patrón decorativo se utiliza generalmente en las siguientes situaciones.

  • Cuando se desea añadir funciones adicionales a una categoría existente, pero el método se puede ampliar para generar subclase. Por ejemplo, la clase está oculto o si la clase es la clase final o el uso de la herencia va a producir una gran cantidad de sub-categorías.
  • Cuando se desea producir una gran cantidad de funciones existentes a través de un conjunto de funciones básicas de permutaciones y combinaciones, utilizando la herencia es difícil de lograr, y el modelo es muy bueno decorada logrado.
  • Cuando el objeto se puede añadir dinámicamente requisitos funcionales, puede ser retirada y luego dinámicamente.

  La famosa aplicación la mayoría de los patrones decorativos en el diseño del lenguaje Java que el O biblioteca de Java I / nivel de. Por ejemplo, las subclases de InputStream FilterInputStream, OutputStream subclase FilterOutputStream, una subclase de BufferedReader Reader y FilterReader, hay subclases escritor BufferedWriter, FilterWriter y PrintStream, etc., son decoración abstracta.

  El código siguiente es un ejemplo de decorativo BufferedReader FileReader aumentar el tampón empleado:

BufferedReader en = nuevo BufferedReader ( nuevo FileReader ( "filename.txtn)); 
cadena s = in.readLine ();

V. patrón decorativo se extiende

  patrón decorativo contenía cuatro papel no está presente en cualquier momento, en algunos entornos de patrón se puede simplificar, ya que los dos casos siguientes.

  • Si un miembro particular no es sólo los miembros abstractos, herencia permite miembro decorativo abstracto Específicamente, la estructura mostrada en la figura Fig.:

                

  •  Si sólo una específica decorativo, extracto y decoración de hormigón se pueden combinar, la estructura que se muestra en la Figura:

               

Supongo que te gusta

Origin www.cnblogs.com/jing99/p/12602674.html
Recomendado
Clasificación