Patrón de decorador de patrones de diseño comunes

concepto

Patrón de decorador (Patrón de decorador), también conocido como Patrón de envoltura (Patrón de envoltura) se refiere a la adición de funciones a los objetos sin cambiar los objetos originales. Este tipo de patrón de diseño pertenece al patrón estructural, que sirve como envoltorio para las clases existentes.
El patrón de decorador incluye principalmente cuatro roles:

  • Componente abstracto (Componente) : Puede ser una interfaz o clase abstracta, que actúa como el objeto original de la clase decorada y especifica el comportamiento del objeto decorado.
  • Componente de hormigón (ConcreteComponent) : un objeto de hormigón que implementa o hereda Component, que es el objeto decorado
  • Decorador abstracto (Decorador) : un decorador general que decora ConcreteComponent. Debe haber una propiedad en él que apunte al componente abstracto Component
  • Decorador de hormigón (ConcreteDecorator) : la clase de implementación de hormigón de Decorator

lograr

Tomemos el pastel, el huevo y el jamón como ejemplo:

1. Crea componentes abstractos

public abstract class  Pancake {
    
    
    abstract String name();
}

2. Crea componentes específicos

public class BasePancake extends Pancake {
    
    
    @Override
    String name() {
    
    
        return "素煎饼";
    }
}

3. Crea un decorador abstracto

public abstract class PancakeDecorator extends Pancake{
    
    
    private Pancake pancake;

    public PancakeDecorator(Pancake pancake) {
    
    
        this.pancake = pancake;
    }
    String name(){
    
    
        return this.pancake.name();
    }
}

4. Crea un decorador de hormigón

public class EggDecorator extends PancakeDecorator {
    
    
    public EggDecorator(Pancake pancake) {
    
    
        super(pancake);
    }
    String name(){
    
    
        return super.name()+"+鸡蛋";
    }
}
public class SausageDecorator extends PancakeDecorator {
    
    
    public SausageDecorator(Pancake pancake) {
    
    
        super(pancake);
    }
    String name(){
    
    
        return super.name()+"+火腿肠";
    }
}

5. Prueba

public class DecoratorTest {
    
    
    public static void main(String[] args) {
    
    
        Pancake pancake=new BasePancake();
        //加鸡蛋
        pancake=new EggDecorator(pancake);
        //再加鸡蛋
        pancake=new EggDecorator(pancake);
        //再加香肠
        pancake=new SausageDecorator(pancake);
        System.out.println(pancake.name());
    }
}

resultado de la operación:
Inserte la descripción de la imagen aquí

escenas que se utilizarán

  • Amplíe la funcionalidad de una clase
  • Función de aumento dinámico, cancelación dinámica

Usar en código fuente

En el código fuente de Mybatis que mencionamos anteriormente, hay una interfaz de caché Cache:
Inserte la descripción de la imagen aquí
se puede entender por el nombre, por ejemplo, FifoCache es un caché de primero en entrar, primero en salir, BlockingCache es un caché de bloqueo, etc., todos adoptan el modo decorador

La diferencia entre el modo decorador y el modo proxy

  1. El decorador enfatiza la expansión de sus propias funciones, y el modo agente enfatiza el control del proceso del agente.

para resumir

ventaja

  1. Se pueden lograr diferentes efectos utilizando diferentes decoraciones y la permutación y combinación de estas decoraciones.
  2. Extienda dinámicamente funciones a un objeto sin cambiar el objeto original

Desventaja

  1. Será más complicado cuando la decoración de múltiples capas.

Supongo que te gusta

Origin blog.csdn.net/xzw12138/article/details/106765165
Recomendado
Clasificación