Los patrones de diseño - modelo institucional - patrones decorativos

En primer lugar, el concepto básico

1, el patrón decorativo se refiere al caso sin cambiar el archivo de clase y el uso herencia original, extensión de la función dinámica de un objeto.

2, objeto decorativo contiene una referencia a un objeto real, es crítico.

3, el papel:

     A: Role componente abstracto (Componente): definición de una interfaz de objeto o clase abstracta se pueden añadir de forma dinámica a la responsabilidad de estos objetos.

     B: el papel de componentes específicos (ConcreteComponent): real de objetos se añaden dinámicamente responsabilidades.

     C: papel decorativo abstracto (decorador): implementa la interfaz de componente utilizado para ampliar la funcionalidad de la clase de componentes, pero para el componente, que es sin saber de la existencia de decorador.

     D: papel decorativo específico (ConcreteDecorator): añadir dinámicamente responsabilidades objeto.

     E: Client (Cliente)

En segundo lugar, ejemplos (de una implementación sencilla, se omite la C)

     A: Función componente abstracto (Componente):

. 1  Paquete comm.pattern.struct.decorator;
 2  
3.  / ** 
4.  * 
 5.  * @Title: Component.java
 . 6  * @package: comm.pattern.struct.decorator
 . 7  * @description: construcción abstracta, Yang Guo analógico
 8  * @ autor yangzhancheng
 . 9  * @ 16 de de marzo de 2020: 12:00:38 aM
 10  *
 . 11   * / 
12 es  pública  interfaz del Componente {
 13 es      pública  vacío Operación ();
 14 }
Ver código

 

     B: el papel de los componentes específicos (ConcreteComponent):

. 1  Paquete comm.pattern.struct.decorator;
 2  
. 3  pública  clase ConcreteComponent los implementos El componente {
 4.  
5.      Pública  vacío Operación () {
 6.          De System.out.print ( "Yang Guo, también nombre, el cambio de la palabra, es Jin Yong" Condor loca "héroe;" );
 7      }
 . 8  
. 9 }
Ver código

 

     C: papel decorativo abstracto (decorador):

          Omitido.

     D: papel decorativo específico (ConcreteDecorator):

     D-1:

1  paquete comm.pattern.struct.decorator;
2  
3  / ** 
4  * 
 5  * @title: Decorator.java
 6  * @Package: comm.pattern.struct.decorator
 7  * @description:装饰类
 8  * @author yangzhancheng
 9  * @ 2020年3月16日:上午12:05:54
 10  *
 11   * / 
12  clase DecoratorA implementos de componentes
 13  {
 14      privado componente Componente;   
15      
16      pública DecoratorA (componente Componente)
 17     {
 18 es          el presente .Componente = Componente;
 . 19      }   
 20 es      
21 es      pública  vacío Operación ()
 22 es      {
 23 es          component.operation ();
 24          de System.out.print ( "tumba tenía que estar en el muerto viviente, Yunvxinjing practicaban;" );
 25      }
 26 }
Ver código

     D-2:

1  paquete comm.pattern.struct.decorator;
2  
3  / ** 
4  * 
 5  * @title: DecoratorB.java
 6  * @Package: comm.pattern.struct.decorator
 7  * @description:装饰类
 8  * @author yangzhancheng
 9  * @ 2020年3月16日:上午12:10:12
 10  *
 11   * / 
12  clase DecoratorB implementos Componente {
 13      
14      privado de componentes componente;
15  
16      pública DecoratorB (componente Componente) {
 17          este= .Componente componentes;
 18 se      }
 . 19  
20 es      pública  vacío Operación () {
 21 es          component.operation ();
 22 es          de System.out.print ( "Tenía una talla hermano" );
 23      }
 24 }
Ver código

 

     E: Client (Cliente)

. 1  Paquete comm.pattern.struct.decorator;
 2  
3.  / ** 
4.  * 
 5.  * @Title: Client.java
 . 6  * @package: comm.pattern.action.templateMethod
 . 7  * @description: Este documento describe lo que
 8  * @ autor yangzhancheng
 . 9  * @ 1 de marzo de 2020: PM 04:47:17
 10  *
 . 11   * / 
12 es  público  clase de cliente {
 13 es  
14      pública  estáticas  void principales (String [] args) {
 15  
16          el Componente Componente = nuevo nuevo ConcreteComponent () ;
17          component.operation ();
18          
19          System.out.println ( "\ n ---------------------------------" );
20          Componente partyComponentDec = nuevo DecoratorA (componente);
21          partyComponentDec.operation ();
22  
23          System.out.println ( "\ n ---------------------------------" );
24          Componente allComponent = nuevo DecoratorB ( nuevo DecoratorA ( nuevo ConcreteComponent ()));
25          allComponent.operation ();
26      }
 27  
28 }
Ver código

 

salida de funcionamiento

Yang Guo, eran mayores de, cambio de carácter, Jin Yong es el "mal" del héroe;
 ---------------------------- -----
Yang Guo, eran mayores de, cambio de carácter, Jin Yong es el "mal" del héroe; se quedó en la tumba de los muertos vivos, Yunvxinjing practicado;
--------------------------------- 
Yang Guo, nombre también, la palabra cambio, es el Jin Yong "Shen Diaoxia compañero, "el héroe, sino que se quedó en la tumba de los muertos vivientes, practicado Yunvxinjing, tenía un hermano águila

 

En tercer lugar, el resumen

    flujo de operación IO es típico de los modelos decorativos. código fuente Posteado posterior.

Supongo que te gusta

Origin www.cnblogs.com/fating/p/12501356.html
Recomendado
Clasificación