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 }
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 }
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 }
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 }
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 }
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.