El patrón del decorador puede agregar dinámicamente algunas responsabilidades adicionales a un objeto. En términos de agregar funciones, el modo decorador es más flexible que generar subclases.
El entorno aplicable para este modo es:
(1) Agregue responsabilidades a un solo objeto de manera dinámica y transparente sin afectar a otros objetos.
(2) manejar las responsabilidades que pueden revocarse.
(3) Cuando el método de generar subclases no se puede usar para la expansión. Un escenario es que puede haber una gran cantidad de extensiones independientes, lo que producirá una gran cantidad de subclases para apoyar cada combinación, lo que provoca que explote el número de subclases. Otro caso puede deberse a que la definición de clase está oculta o la definición de clase no puede usarse para generar subclases.
Pasos clave para implementar este modo:
(1) componente (la clase base del objeto decorado): define la interfaz del objeto, que puede agregar dinámicamente responsabilidades a estos objetos;
(2) ConcreteComponent (objeto decorativo específico): define un objeto específico, y el decorador puede agregarle responsabilidades adicionales;
(3) decorador (clase abstracta del decorador): mantiene una referencia a la instancia del componente y define una interfaz consistente con el componente ( es decir, para heredar o implementar la clase base del objeto decorado );
(4) Concretedecorator: un objeto decorativo específico, que agrega responsabilidades específicas a los objetos decorativos específicos que se mantienen internamente;
Esto puede ser un poco difícil de entender para todos, por lo que todavía estamos callados:
Después del invierno, el clima se volvió cada vez más frío. Después de salir del trabajo, como un goodie veterano, sería genial tener una cita con dos o tres amigos para tener una fiesta caliente. Hablando de una olla caliente, tengo que mencionar la olla caliente de Dalong que he comido en Chengdu, con todo tipo de fondos y guarniciones, pero mi favorito son los fondos originales de la olla caliente de Dalong, carne picante, tripas dadao, salchicha de Tianwei, carne de carne de cerdo picante, costillas picantes, etc. Incluso puedo mascar cuando pienso cuando pienso en él.
Cuando se trata de esto, debes sentirte un poco al respecto. El fondo de la olla mencionado anteriormente es en realidad la base del objeto decorativo . Los ingredientes son en realidad el objeto abstracto decorativo . Los fondos específicos de la maceta del fondo original de la olla original de la olla dalong son los objetos decorativos específicos. Las diversas guarniciones utilizadas para decorar el fondo de la olla son los objetos decorativos específicos . Hablando de esto, todos deberían haberse dado cuenta de repente. Comencemos la implementación del código específico:
Paso 1: Defina la clase base del objeto decorado (puede ser una clase o interfaz abstracta)
interfaz pública guodi {public float cost (); // Por supuesto, la parte inferior de la olla debe tener un precio del nombre de cadena pública (); // El nombre también debe estar disponible} Paso 2: Defina el objeto decorativo específico (es decir, varios fondos de olla, dos se definen aquí)
clase pública Yuanyang implementa Guodi {@Override public float cost () {return 48.0f; } @Override public String Name () {return "Double Pot Base"; }} clase pública Dalongyan implementa Guodi {@Override public float cost () {return 59.0f; } @Override public String Name () {return "Dalong Hot Pot Original Pot Base"; }}Paso 3: Defina la clase abstracta del decorador
Public RESUMEN CLASS PEICAI Implementa Guodi {private Guodi Guodi; Public FoodDecorator (Guodi Guodi) {super (); this.guodi = Guodi; } @Override public float cost () {return guodi.cost (); } @Override public String name () {return guodi.name (); }}Paso 4: Defina el objeto decorador específico
clase pública Malaniurou extiende Peicai {public Malaniurou (Guodi Guodi) {super (Guodi); } @Override public float cost () {return super.cost ()+46f; } @Override public String name () {return super.name ()+"+carne de res picante"; }} clase pública Maodu extiende Peicai {public maodu (Guodi Guodi) {super (Guodi); } @Override public float cost () {return super.cost ()+30f; } @Override public String Name () {return super.name ()+"+big knife tripe"; }}Clase de prueba:
Prueba de clase pública {public static void main (string [] args) {guodi guodi = new dalongyan (); // ordene un dalong hot mac de olla consumir "+s.cost ()); }}Resultado de salida:
1.
Lo anterior es el modelo decorador de Java que le presenta el editor (comprensión del principio del código desde una perspectiva de la vida real). Espero que sea útil para todos. Si tiene alguna pregunta, déjame un mensaje y el editor responderá a todos a tiempo. ¡Muchas gracias por su apoyo al sitio web de Wulin.com!