Definición del puente: separa la abstracción y el comportamiento, y combina cada uno de forma independiente pero dinámica.
Por qué usar el modo puente
En general, cuando una clase o interfaz abstracta tiene múltiples implementaciones concretas (subclase concreta), la relación entre estos concretos puede ser la siguiente:
1. Estas implementaciones específicas son paralelas.
2. En la aplicación práctica, a menudo es posible superponerse conceptualmente entre estas múltiples clases concretas. Luego necesitamos separar el resumen común y el comportamiento común.
Por ejemplo, como ejemplo, hay dos tipos de café: tazas medianas y grandes, y también hay diferentes tipos de leche y leche. Si se usa una herencia simple, hay una superposición de concepto entre estas cuatro implementaciones específicas (millones de taza con leche sin leche) porque hay tazas medianas con leche y hay tazas medianas sin leche. También está en la Copa Media. Luego usamos el modo puente para implementarlo.
Cómo implementar el modo de puente
El café mencionado anteriormente es un ejemplo. Originalmente planeamos diseñar solo una interfaz (clase abstracta).
Echemos un vistazo al código de interfaz de la parte abstracta:
La copia del código es la siguiente:
Café de clase abstracta pública {
Cafetería café;
public void setCoffeeimp () {
this.coffeeimp = Coffeeimpsingleton.getThecoffeImp ();
}
Public Coffeeimp getCoffeeImp () {return this.coffeeimp;}
Public Abstract void Pourfofee ();
}
El café es una interfaz de comportamiento sin leche agregada.
La copia del código es la siguiente:
Cafetería de clase abstracta pública {
Public Abstract void PourCoffeeimp ();
}
Ahora tenemos dos clases abstractas, las heredamos respectivamente e implementamos una clase concreta:
La copia del código es la siguiente:
// taza central
Public Class MediumCoffee extiende el café {
public MediumCoffee () {setCoffeeImp ();}
public void PourCoffee () {
Coffeeimp cafeimp = this.getCoffeeImp ();
// Usamos el número de repeticiones para explicar si hacer una copa media o una taza grande.
Coffeeimp.PourCoffeeImp ();
}
}
}
La copia del código es la siguiente:
// taza grande
clase pública SuperSizeCoffee extiende el café {
public SuperSizeCoffee () {setCoffeeImp ();}
public void PourCoffee () {
Coffeeimp cafeimp = this.getCoffeeImp ();
// Usamos el número de repeticiones para explicar si hacer una taza media o una taza grande.
Coffeeimp.PourCoffeeImp ();
}
}
}
Las anteriores son las implementaciones específicas de la taza media y la taza grande respectivamente.
La copia del código es la siguiente:
// Agregar leche
clase pública MilkCoffeeimp extiende café {
MilkCoffeeImp () {}
public void PourCoffeeimp () {
System.out.println ("agregó deliciosa leche");
}
}
// no se agregó leche
clase pública FragrantCoffeeIimp se extiende café {
FragrantCoffeeImp () {}
public void PourCoffeeimp () {
System.out.println ("Nada agregado, fragancia fresca");
}
}
Ya hemos configurado el marco básico del modelo de puente.
1. Agregue la leche a la taza media
2. No se agregó leche en la taza media
3. Agregue la leche a una taza grande
4. Copa grande sin leche
Veamos cómo se combina dinámicamente.
La copia del código es la siguiente:
Caféimpleton de clase pública {
café de café estático privado de café;
Cafetería pública (Cafetería Cafetería)
{this.coffeeimp = Coffeeimpin;}
Public Static Coffeeimp GetThecoffeeImp () {
regresar café;
}
}
Veamos cómo sale la taza media de leche y la gran taza de leche:
// saca la leche
Coffeeimpsingleton Coffeeimpsingleton = nuevo Coffeeimpsingleton (nuevo MilkCoffeeImp ());
// taza media con leche
MediumCoffee MediumCoffee = new MediumCoffee ();
MediumCoffee.PourCoffee ();
// una gran taza de leche
SuperSizeCoffee SuperSizeCoffee = new SuperSizeCoffee ();
supersizeCoffee.pourCoffee ();
Nota: Las clases de ejecución del esquema de puentes, como el café y el café, son relaciones uno a uno, y crear correctamente el café es la clave de este esquema.
Aplicación del modo puente en EJB
Hay un patrón de objeto de acceso a datos (DAO) en EJB, que separa la lógica del negocio de los recursos de datos específicos porque diferentes bases de datos tienen diferentes operaciones de bases de datos. Los comportamientos que operan diferentes bases de datos se abstraen de forma independiente en una interfaz de comportamiento DAO, de la siguiente manera:
1. Objeto de negocios (similar al café)
Implemente algunas operaciones comerciales abstractas: como encontrar un usuario para realizar todos los pedidos. DaoImplementor se utiliza para operaciones de bases de datos.
2. Objeto de acceso de datos (similar al café)
Algunas operaciones abstractas en recursos de la base de datos.
3.
Operaciones específicas de la base de datos, como "insertar en" y otras declaraciones, Orderdaooracle es Oracle Orderdaosybase es la base de datos SYBASE.
4. Base de datos (base de datos Cloudscape, Oracle o Sybase a través de la API JDBC)