Patrón de diseño 07 Modo puente

El patrón de puente es un patrón estructural.

Descripción general

El patrón puente consiste en separar la parte abstracta de su parte de implementación para que puedan cambiar de forma independiente. Es un patrón estructural de objeto, también conocido como patrón Mango y Cuerpo o patrón Interfaz .

Por ejemplo, si necesita crear un objeto de computadora, hay muchas computadoras en el mercado. Las marcas incluyen Huawei, Apple, Lenovo, etc., y los tipos incluyen computadoras de escritorio, portátiles, tabletas, etc. Si crea un objeto para cada tipo de computadora de cada marca, sería muy engorroso y muy inconveniente de expandir. Imagínense si se agrega una marca o tipo , es necesario agregar una gran cantidad de objetos, lo que sin duda es engorroso e ineficiente.

En este momento pensaremos que si establecemos una dimensión para marca y tipo respectivamente, y luego combinamos estas dos dimensiones, obtendremos un objeto, de esta manera solo necesitamos definir todas las marcas y todos los tipos . para agregar, simplemente agregue una marca o tipo .

Código

A continuación se utilizan Huawei y Apple como marcas, computadoras de escritorio y portátiles como ejemplos de tipos para implementar el modo puente:

1. Definir la marca

/**
 * 品牌
 */
public interface Brand {
    
    

    /**
     * 名称
     */
    String name();

}

2. Definir computadora

/**
 * 电脑
 */
public abstract class Computer {
    
    

    /**
     * 品牌
     * <p>因为需要提供继承类使用,这里定义为 protected
     */
    protected Brand brand;
    
    public Computer(Brand brand) {
    
    
        this.brand = brand;
    }

    /**
     * 获取电脑名称,留给子类实现
     */
    public abstract String name();
}

3. Definir marcas específicas

/**
 * 华为
 */
public class HuaWei implements Brand {
    
    
    
    @Override
    public String name() {
    
    
        return "华为";
    }
}
/**
 * 苹果
 */
public class Apple implements Brand {
    
    
    
    @Override
    public String name() {
    
    
        return "苹果";
    }
}

4. Definir el tipo

/**
 * 台式
 */
public class Desktop extends Computer {
    
    

    public Desktop(Brand brand) {
    
    
        super(brand);
    }

    @Override
    public String name() {
    
    
        return super.brand.name() + "台式";
    }
}
/**
 * 笔记本
 */
public class Laptop extends Computer {
    
    

    public Laptop(Brand brand) {
    
    
        super(brand);
    }

    @Override
    public String name() {
    
    
        return super.brand.name() + "笔记本";
    }
}

5. Llamar

// 苹果笔记本
Computer computer = new Laptop(new Apple());
System.out.println(computer.name());

// 华为台式机
Computer computer1 = new Desktop(new HuaWei());
System.out.println(computer1.name());

La salida es:

苹果笔记本
华为台式

Esto logra unir marcas y tipos . De esta manera, cuando necesita agregar una marca, solo necesita agregar una clase para implementar la interfaz Marca; cuando necesita agregar un tipo, solo necesita agregar una clase para heredar la clase Computadora.

Ventajas y desventajas

ventaja

1. El modo puente es ocasionalmente similar a la solución de herencia múltiple, pero la solución de herencia múltiple viola el principio de responsabilidad única de la clase, tiene poca reutilización y tiene una gran cantidad de clases. El modo puente es una mejor solución que la solución múltiple. solución de herencia. Reduce en gran medida el número de subclases, reduciendo así los costes de gestión y mantenimiento.

2. El modo puente mejora la escalabilidad del sistema. Puede expandir arbitrariamente una de las dos dimensiones cambiantes sin modificar el sistema original. De acuerdo con el principio de apertura y cierre , es como un puente que puede conectar dos dimensiones cambiantes.

3. Separación de abstracción e implementación.

4. Excelentes capacidades de expansión.

5. Hacer que los detalles de implementación sean transparentes para los clientes.

defecto

1. La introducción del modo puente aumentará la dificultad de comprender y diseñar el sistema. Dado que la relación de agregación se establece en la capa de abstracción, los desarrolladores deben diseñar y programar en función de la abstracción.

2. El modo puente requiere la identificación correcta de dos dimensiones que cambian independientemente en el sistema, por lo que su ámbito de uso tiene ciertas limitaciones.

escenas a utilizar

1. Si un sistema necesita agregar más flexibilidad entre los roles abstractos construidos y los roles específicos, y evitar establecer una relación de herencia estática entre los dos niveles, puede establecer una relación de asociación en la capa abstracta a través del modo puente. Los roles abstractos y los roles concretos se pueden expandir de forma independiente a través de la herencia sin afectarse entre sí. Cuando el programa se está ejecutando, un objeto de una subclase abstracta y un objeto de una clase concreta se pueden combinar dinámicamente. Es decir, el sistema necesita combinar dinámicamente los roles abstractos. roles y roles concretos.acoplamiento.

2. Una clase tiene dos dimensiones que cambian independientemente y es necesario expandir ambas dimensiones.

3. Aunque no hay problema en utilizar la herencia en el sistema, debido a que los roles abstractos y los roles concretos deben cambiarse de forma independiente, el diseño requiere que se administren de forma independiente. El modo puente es especialmente adecuado para sistemas que no quieren utilizar la herencia o donde el número de clases del sistema aumenta drásticamente debido a la herencia multinivel.

4. El lenguaje Java logra la independencia de plataforma a través del puente entre la máquina virtual Java y el sistema operativo.

5. Arquitectura de pares en AWT.

6. Controlador JDBC.

Precauciones

Para dos dimensiones que cambian de forma independiente, usar el modo puente es perfecto.


referencia

https://www.bilibili.com/video/BV1mc411h719?p=8&vd_source=299f4bc123b19e7d6f66fefd8f124a03

Supongo que te gusta

Origin blog.csdn.net/qq_37770674/article/details/132472722
Recomendado
Clasificación