Este artículo describe los principios y el uso de modos decorativos de patrones de diseño Java. Compártelo para su referencia, como sigue:
El modo decorativo puede extender dinámicamente la funcionalidad de un objeto sin cambiar el archivo original y usar la herencia. Envuelve el objeto real creando un objeto de envoltorio, es decir, decoración. El diseño de IO en JDK utiliza el modo decorativo, que puede expandir la función envolviendo el flujo de nodo a través del flujo de filtrado.
La composición del personaje en el modo decorativo:
① Rol de componente abstracto: brinde una interfaz abstracta para estandarizar objetos que están preparados para recibir funciones de procesamiento. (InputStream, OutputStream)
② Cole de componente concreto: define una clase que recibirá funciones adicionales. (Flujo de nodo)
③ Rol de decorador: contiene una instancia de un objeto componente e implementa una interfaz consistente con la interfaz de componente abstracto. (FilterInputStream, FilterOutputStream)
④ Decorador de concreto Role: responsable de agregar funciones adicionales a los objetos de componentes. (Fluye el flujo con funciones adicionales específicas, BufferedInputStream, DataintStream, etc.)
Aquí hay un ejemplo simple de un patrón decorativo:
1. Componente abstracto Role : Defina un componente de interfaz
paquete com.tydic.decorator; // componente de componente abstracto Componente de interfaz pública {public void dosomething ();}2. Roles de construcción específicos : necesita implementar roles de componentes abstractos y puede agregar algunas responsabilidades a este objeto.
paquete com.tydic.decorator;/** * Construcción de roles concretos, implementar construcción de roles abstractos * @author administrador * */public class ConcreteComponent implementa componente {@Override public void dosomThing () {System.out.println ("Funcion A"); }} 3. Decorar rol : mantenga un objeto para construir una referencia al rol e implementar roles de componentes abstractos. El rol de componente abstracto se implementa porque el tipo no se puede cambiar después de agregar funciones, al igual que FilterInputStream sigue siendo una secuencia de entrada, que todavía tiene las características de una secuencia de entrada. La referencia a un rol de construcción de objetos se debe a que para agregar funciones, debe mantener una referencia al papel de componente al que se adjuntará la función.
paquete com.tydic.decorator;/*** Decorar el rol, mantener una referencia a un rol de componente e implementar el rol de componente* Si desea agregar una función, debe implementar el rol de componente. Para agregar una función, debe mantener una referencia al rol de componente que se adjuntará. Es por eso que debe tener una referencia al rol de componente * @author administrador * */la clase pública Decorator implementa el componente {componente privado componente; // Este es el rol de componente que se adjuntará, que se puede cargar en el decorador público instanciado (componente componente) {this.component = componente; } @Override public void dosomething () {componente.dosomthing (); }}4. Rol decorativo específico : se deben heredar los roles decorativos y se dan las funciones que se adjuntarán.
paquete com.tydic.decorator;/** * Para el rol decorativo específico 1, el rol decorativo debe heredarse y las funciones que se adjuntarán se dan * @author administrador * */clase pública Concretedecorator1 extiende el decorador {public Concretedecorator1 (componente componente) {componente); } @Override public void dosomething () {super.dosomthing (); this.doanothing (); // Agregar funciones sobre la base de las funciones originales de los roles de componentes específicos aprobados} // Funciones adicionales public void doanothing () {system.out.println ("función b"); }} paquete com.tydic.decorator;/** * Para el rol decorativo específico 2, el rol decorativo debe heredarse y las funciones que se adjuntarán se dan * @author administrador * */public class Concretedecorator2 extiende el decorador {public Concretedecorator2 (componente componente) {componente); } @Override public void dosomething () {super.dosomthing (); this.doanothing (); // Funciones adicionales public void doanothing () {System.out.println ("Función C"); }}5. Escribir código de cliente
paquete com.tydic.decorator; public class Client {public static void main (string [] args) {componente componente = new ConcreteComponent (); // Construye el componente de rol Componente2 = new ConcretedeCorator1 (componente); // Decorar el componente componente Componente 3 = nuevo ConcretEdecorator2 (componente2); componente3.dosomething (); }}Resumir:
El modo decorativo puede usar el método de combinación y expandir dinámicamente objetos en tiempo de ejecución sin herencia. Esto es algo que la herencia no puede hacer. La herencia es estática, una extensión a la clase.
Ventajas y desventajas del modo decorativo:
Ventajas: 1. Extienda la función del objeto, que es más flexible que la herencia. 2. Al usar diferentes categorías decorativas específicas y la disposición y la combinación de estas categorías decorativas, los diseñadores pueden crear muchas combinaciones de diferentes comportamientos.
Desventajas: hará que el programa sea más complicado.
Para obtener más contenido relacionado con Java, los lectores interesados en este sitio pueden ver los temas: "Introducción y tutorial avanzado sobre la programación orientada a objetos de Java", "Tutorial sobre la estructura de datos de Java y el algoritmo", "Resumen de la operación de Java DOM Node Node", "Summary of Java File and Directory Operation Skilly" y "Summary of Java Cache Skitch" Habilidades "
Espero que este artículo sea útil para la programación Java de todos.