Este artículo describe un caso de bollos al vapor teñidos implementados por Java basado en el patrón del decorador. Compártelo para su referencia, como sigue:
1. Definición de patrones
El patrón del decorador extiende dinámicamente una función de objeto sin cambiar el archivo original y usar la herencia. Envuelve el objeto real creando un objeto de envoltura, es decir, decoración.
Los objetos decorativos y los objetos reales tienen la misma interfaz, para que los objetos del cliente puedan interactuar con los objetos decorativos de la misma manera que los objetos reales.
Un objeto decorativo contiene una referencia a un objeto real.
2. Ejemplos del modelo
1. Análisis de patrones
Utilizamos el caso de los proveedores de corazón negro para hacer bollos teñidos para ilustrar este modelo.
2. Diagrama de clase estática en modo decorador
3. Ejemplo de código
3.1 Crear una interfaz de moño al vapor - Ibread
paquete com.demo.abs;/** * Interfaz de procesamiento de BUN vaporizado * * @Author * */Public Interface IBread {// Prepara los materiales public void prepair (); // Harmony Public Void Kneefleur (); // bollos al vapor público void vapor (); / *** Procesamiento de bollos vaporizados*/ Public void Process ();}3.2 Implementación de BUN normal - Normalbread
paquete com.demo.abs;/** * Implementación de bollos al vapor normales * * @author * */public class NormalBread implementa Ibread {// Preparar los ingredientes public void prepair () {System.out.println ("Preparar harina, agua y polvo de cocción ..."); } // hemian public void Kneefleur () {System.out.println ("Hmian ..."); } // bollos al vapor public void vapor () {system.out.println ("bollos al vapor ... ¡los bollos al vapor fragantes están fuera del horno!"); } / *** procesar bollos vaporizados* / Public void Process () {// Prepara los ingredientes preparar (); // Kneadflour (); // al vapor al vapor (); }}3.3 Crear un decorador abstracto - Arbel
paquete com.demo.decorator; import com.demo.abs.ibread;/** * decorador abstracto * * @author * */public abstract RESSURGREMBREAD implementa IBread {// almacenar el objeto Ibread entrante privado fin final Ibread Bread; public AbstractBread (Ibread Bread) {this.bread = Bread; } // Preparar el material público vacío prepare () {this.bread.peir (); } // gentilmente public void Kneefleur () {this.bread.kneadflour (); } // bollos al vapor public void vapor () {this.bread.steamed (); } // procesar bollos al vapor public void Process () {prepair (); rodilla (); al vapor (); }}3.4 Crear un decorador de tinte - Corndecorator
paquete com.demo.decorator; import com.demo.abs.ibread;/** * Dyeed Buns de maíz * * @author * */public class CornDecorator extiende AbstractBread {// Método de construcción Public CornDecorator (Ibread Bread) {Super (Bread); } // Los proveedores de corazón negro han comenzado a teñir public void Paint () {System.out.println ("Agregar colorante amarillo limón ..."); } // sobrecarga el método de masa de la clase principal @Override public void Kneefleur () {// this.paint () se inicia después de agregar tinte a la harina; // pegar super.kneadflour (); }}3.5 Crear un decorador de escalera - Decorador Sweet
paquete com.demo.decorator; import com.demo.abs.ibread;/** * cyperus vapored Bun * * @author * */public class SweetDecorator extiende AbstractBread {// Construye Método Public SweetDecorator (Ibread Bread) {Super (Bread); } // Los proveedores de corazón negro comienzan a agregar cyperus public void pintar () {System.out.println ("Agregar cyperus ..."); } // sobrecarga el método de masa de la clase principal @Override public void Kneefleur () {// Iniciar masa this.Paint () después de agregar cyperus a la harina; // hemma super.kneadflour (); }}3.6 Producción de bollos al vapor de maíz dulce - cliente
paquete com.demo; import com.demo.abs.ibread; import com.demo.abs.normalbread; import com.demo.decorator.corndecorator; import com.demo.decorator.sweetDecorator;/** * Aplicación de clientes * * @Author * */public class Cliente {/** * @param */público voids // Producción de bollos decorativos al vapor System.out.println ("/n ====== ¡Comience los bollos al vapor decorativo!"); // Cree una instancia normal de Bun Normal Vapor // Esta es una instancia de objeto que necesitamos para envolver (decorar) Ibread NormalBread = new NormalBread (); // ¡Empecemos a decorar los bollos al vapor normales! ! ! // Use la sacarina para decorar los bollos al vapor NormalBread = nuevo SweetDecorator (NormalBread); // Use colorante amarillo limón para decorar los bollos al vapor Normalbread = nuevo CornDecorator (NormalBread); // Producción de información de BUN al vapor NormalBread.process (); System.out.println ("===== Decora el final de los bollos al vapor !!!"); }}4. Resultados de la operación
==== ¡Empiece a decorar bollos al vapor! ! !
Prepare harina, agua y polvo de hornear ...
Agregar colorante amarillo limón ...
Agregar cianina ...
Grasa...
Bollos al vapor ... ¡los bollos al vapor fragantes están fuera del horno!
==== ¡El bollo decorativo al vapor termina! ! !
3. Los principios de diseño de este modelo
1 parte de cambio cerrado
2 Principio "abierto y cerrado"
3 programación orientada a resumen
4. Prefiere combinaciones en lugar de herencia
4. Use ocasiones
1. Cuando necesitamos agregar una nueva característica o responsabilidad a un objeto existente dinámicamente, podemos considerar usar el patrón del decorador.
2. Cuando las responsabilidades de un objeto a menudo cambian o las responsabilidades deben aumentarse dinámicamente, evite agregar la expansión de la subclase hereditaria para adaptarse a tales cambios, porque este método hará que la subclase se expanda demasiado rápido y sea difícil de controlar. En este momento, se puede usar el modo decorador.
5. Diagrama de clase estática en modo decorador
Para obtener más información sobre los algoritmos de Java, los lectores interesados en este sitio pueden ver los temas: "Estructura de datos Java y tutorial de algoritmo", "Resumen de las puntas de nodo de operación de Java DOM", "Resumen de Java Archivo y TIPS de operación de directorio" y "Summary of Java Cache Operation Tips" TIPS ""
Espero que este artículo sea útil para la programación Java de todos.