Patrón de diseño de Android: modo puente

1. Modo puente

El patrón Bridge es un patrón de diseño estructural que desvincula la abstracción de la implementación. Utiliza la interfaz como puente para separar el código de una clase abstracta de su clase de implementación para que puedan variar de forma independiente. La idea central del patrón de puente es "la composición es mejor que la herencia".

En pocas palabras, la función de una clase está controlada por dos dimensiones, y ambas dimensiones tienen diferentes implementaciones, que se pueden combinar a voluntad.

Para lograr el propósito de hacer que la parte abstracta y la parte de implementación cambien independientemente, la parte abstracta tendrá el objeto de interfaz de la parte de implementación.Después de tener el objeto de interfaz de la parte de implementación, la función de la parte de implementación específica puede ser llamado a través de esta interfaz. El puente está incorporado en el programa como un objeto de interfaz con la parte abstracta que posee la parte de implementación, realizando una relación de puente. El puente en el modo puente es una relación unidireccional, y solo la parte abstracta puede usar el objeto de la parte de implementación.

2b71f933ef3a4e97b1d338dbba72613d.png

Papel de la abstracción Abstracción: la definición dada por la abstracción, que contiene una referencia al objeto realizado.

Función de abstracción revisada Abstracción refinada: ampliar la función de abstracción, cambiar y modificar la definición de abstracción por parte de la clase principal.

Implementador de rol realizado: proporciona la interfaz del rol realizado, pero no proporciona una implementación específica. Tenga en cuenta que esta interfaz no es necesariamente la misma que la definición de interfaz del rol abstracto; de hecho, las dos interfaces pueden ser muy diferentes. Los roles realizados solo deben proporcionar las operaciones subyacentes, mientras que los roles abstractos solo deben proporcionar operaciones de nivel superior basadas en las operaciones subyacentes.

ConcreteImplementor: ConcreteImplementor: Implementación concreta de la interfaz del rol realizado.

Parte abstracta:

Abstracción de clase pública abstracta {

    private Implementor implementor; //La parte abstracta tendrá el objeto de interfaz de la parte de implementación, y la interfaz actúa como un puente, haciendo que la función de la clase de implementación abstracta sea independiente de la clase de implementación de la interfaz

    Abstracción pública (Implementador implementador

        this.implementador = implementador;

    }

    operación de vacío público () {

        implementador.operaciónImpl();

    }

}

clase pública Abstracción refinada extiende Abstracción {

    abstracción refinada pública (implementador implementador) {

        súper (implementador);

    }

    public void operaciónrefinada() {

        //Ampliar el método de operación en Abstracción

    }

}

Parte de implementación:

Implementador de interfaz pública {

    anular operaciónImpl();

}

clase pública ConcreteImplementorA implementa Implementor{

    @Anular

    operación vacía públicaImpl () {

        //Implementación

    }

}

clase pública ConcreteImplementorB implementa Implementor{

    @Anular

    operación vacía públicaImpl () {

        //Implementación

    }

}

A través de la estructura, se puede ver claramente que la clase abstracta Abstraction es como un puente que conecta RefinedAbstraction e Implementor.

 

2. Escenarios de uso del modo puente

① Si un sistema necesita agregar más flexibilidad entre el rol abstracto construido y el rol concreto, 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 realizados se pueden expandir de forma independiente en forma de herencia sin afectarse entre sí. Cuando el programa se está ejecutando, un objeto de una subclase abstracta y un objeto de una subclase realizada se pueden combinar dinámicamente, es decir, el sistema necesita Acople dinámicamente los roles de la realización y los roles de la realización.

③ Una clase tiene dos dimensiones que cambian independientemente y ambas dimensiones deben expandirse.

④ Aunque no hay ningún problema en usar la herencia en el sistema, dado que los roles abstractos y los roles concretos deben cambiar de forma independiente, los requisitos de diseño deben administrarse de forma independiente.

⑤El modo puente es especialmente adecuado para aquellos sistemas que no desean utilizar la herencia o el número de clases del sistema aumenta considerablemente debido a la herencia de varios niveles.

 

3. Ventajas y desventajas del modo puente

1) ventajas:

①Separación de la parte abstracta y la parte de implementación

El modo de puente separa la parte abstracta y la parte de implementación, proporcionando así en gran medida la flexibilidad del sistema, haciendo que la parte abstracta y la parte de implementación sean independientes y definiendo interfaces por separado, lo que ayuda al sistema a realizar un diseño jerárquico, lo que da como resultado un sistema mejor estructurado. . Para la parte de alto nivel del sistema, solo necesita conocer la interfaz entre la parte abstracta y la parte de implementación.

② Mejor escalabilidad

El modo puente define la interfaz de la parte abstracta y la parte de implementación respectivamente, lo que permite que la parte abstracta y la parte de implementación se expandan de forma independiente sin afectarse entre sí, lo que mejora en gran medida la escalabilidad del sistema.

③Se puede realizar una conmutación dinámica

Dado que el modo puente realiza la separación de la abstracción y la implementación, cuando se implementa el modo puente, se puede realizar la selección dinámica y el uso de implementaciones específicas.

④Los detalles de implementación son transparentes para el cliente y los detalles de implementación se pueden ocultar al usuario.

2) Desventajas:

①La introducción del modo puente aumenta la dificultad de comprensión y diseño del sistema. Dado que la relación de agregación se establece en la capa abstracta, los desarrolladores deben diseñar y programar para la abstracción.

②El modo puente requiere la identificación correcta de dos dimensiones que cambian de forma independiente en el sistema, por lo que su alcance de uso tiene ciertas limitaciones.

 

4. Ejemplo de modo puente

Para comprender mejor el patrón del puente, veamos un ejemplo simple: supongamos que tenemos una clase de forma, que tiene una propiedad de color. En este punto, si se utiliza la herencia para implementar clases de forma de diferentes colores, es necesario crear muchas subclases, lo que hace que la estructura del código sea compleja y difícil de mantener. Usando el modo puente, puede abstraer la forma y el color por separado, para que sean independientes.

interfaz pública Color {

    Cadena getColor();

clase pública Red implementa Color {

    @Anular

    cadena pública getColor() {

        devolver "rojo";

    }

}

clase pública Azul implementa Color {

    @Anular

    cadena pública getColor() {

        devolver "azul";

    }

}

Forma de clase pública abstracta {

    color de color protegido;

    Forma pública (color de color) {

        este.color = color;

    }

    sorteo de vacío abstracto público ();

}

Rectángulo de clase pública extiende Forma {

    rectángulo público (color color) {

        súper (color);

    }

    @Anular

    sorteo de vacío público () {

        System.out.println("Dibuja un rectángulo de " + color.getColor() + "");

    }

}

círculo de clase pública extiende forma {

    círculo público (color de color) {

        súper (color);

    }

    @Anular

    sorteo de vacío público () {

        System.out.println("Dibuja un círculo de " + color.getColor() + "");

    }

}

En el código anterior, primero se define una interfaz de color y se implementan respectivamente el rojo y el azul. Luego, se define una clase de forma abstracta, que tiene una propiedad de color y un método abstracto draw(). Finalmente, se implementan clases concretas de rectángulo y círculo y se pasa un objeto de color en el constructor.

De esta manera, la forma y el color se abstraen por separado para lograr el desacoplamiento. Cuando necesite crear formas de diferentes colores, solo necesita crear objetos de diferentes colores y pasarlos.

 

5. Uso en el código fuente de Android

El modo puente se utiliza entre Window y WindowManager.

e58182d822ae4e9480fac4fe202cd57b.png

Entre ellos, Window y PhoneWindow constituyen la parte abstracta de la ventana, Window es la interfaz de la parte abstracta, PhoneWindow es la implementación concreta y la extensión de la parte abstracta, WindowManager es la clase base de la parte de implementación y WindowManagerImpl es la implementación parte de la implementación lógica específica, que utiliza WindowMangerGlobal a través de La interfaz IWindowManager se comunica con WMS y, finalmente, WMS completa la administración de ventanas específicas. Es un modo típico de conexión en puente.

Supongo que te gusta

Origin blog.csdn.net/zenmela2011/article/details/131188344
Recomendado
Clasificación