Brückendefinition: Trennt Abstraktion und Verhalten und kombiniert jeden unabhängig, aber dynamisch.
Warum Brückenmodus verwenden
Wenn eine abstrakte Klasse oder Schnittstelle mehrere konkrete Implementierungen (konkrete Unterklasse) aufweist, kann die Beziehung zwischen diesen Beton wie folgt sein:
Diese spezifischen Implementierungen sind parallel.
2. In der praktischen Anwendung ist es häufig möglich, sich konzeptionell zwischen diesen mehreren konkreten Klassen zu überschneiden. Dann müssen wir das gemeinsame Zusammenfassung und das gemeinsame Verhalten trennen.
Zum Beispiel gibt es beispielsweise zwei Kaffeetypen: mittlere und große Tassen, und es gibt auch verschiedene Arten von Milch und Milch. Wenn eine einfache Vererbung verwendet wird, gibt es eine Konzeptüberlappung zwischen diesen vier spezifischen Implementierungen (Millionen Tasse mit Milch ohne Milch), da es mittelgroße Tassen mit Milch gibt und mittelgroße Tassen ohne Milch vorhanden sind. Es ist auch im mittleren Pokal. Dann verwenden wir den Bridge -Modus, um es zu implementieren.
So implementieren Sie den Brückenmodus
Der oben erwähnte Kaffee ist ein Beispiel. Wir haben ursprünglich nur eine Schnittstelle (abstrakte Klasse) entwerfen.
Schauen wir uns den Schnittstellencode des abstrakten Teils an:
Die Codekopie lautet wie folgt:
öffentliche abstrakte Klassenkaffee {
Coffeep Coffeep;
public void setcoffeepep () {
this.coffeImp = coffeeImpsingleton.gthecoffeImp ();
}
public coffeeps getCoffeImp () {return this.coffeep;}
public abstract void pourcoffee ();
}
Coffeep ist eine Verhaltensschnittstelle ohne Milch.
Die Codekopie lautet wie folgt:
public abstract Class CoffeeMP {
public abstract void pourcoffeep ();
}
Jetzt haben wir zwei abstrakte Klassen, wir erben sie jeweils und implementieren konkrete Klasse:
Die Codekopie lautet wie folgt:
// Mittelbecher
öffentliche Klasse MediumCoffee erweitert Kaffee {
public MediumCoffee () {setCoffeeImp ();}
public void pourcoffee () {
Coffeep Coffeep = this.getCoffeeImp ();
// Wir verwenden die Anzahl der Wiederholungen, um zu erklären, ob ein Mid-Cup oder eine große Tasse zweimal wiederholt werden soll.
Coffeep.PourcoffeeImp ();
}
}
}
Die Codekopie lautet wie folgt:
// Big Cup
öffentliche Klasse SuperSizeCoffee erweitert Kaffee {
public supersizecoffee () {setCoffeeImp ();}
public void pourcoffee () {
Coffeep Coffeep = this.getCoffeeImp ();
// Wir verwenden die Anzahl der Wiederholungen, um zu erklären, ob ein Mid-Cup oder eine große Tasse 5-mal wiederholt werden soll, um eine große Tasse für (int i = 0; i <5; i ++) zu sein.
Coffeep.PourcoffeeImp ();
}
}
}
Die oben genannten sind die spezifischen Implementierungen der mittleren Tasse bzw. der großen Tasse.
Die Codekopie lautet wie folgt:
// Milch hinzufügen
öffentliche Klasse MilkcoffeImp erweitert Coffeep {
Milchcoffeep () {}
public void pourcoffeepep () {
System.out.println ("Köstliche Milch hinzugefügt");
}
}
// keine Milch hinzugefügt
öffentliche Klassen duftendcoffeept erweitert Coffeeps {
Duftendcoffeep () {}
public void pourcoffeepep () {
System.out.println ("Nichts hinzugefügt, frischer Duft");
}
}
Wir haben bereits den grundlegenden Framework des Brückenmodells eingerichtet.
1. Milch in mittlerer Tasse hinzufügen
2. In der mittleren Tasse keine Milch hinzugefügt
3.. Milch zu einer großen Tasse hinzufügen
4. Große Tasse ohne Milch
Mal sehen, wie es dynamisch kombiniert wird.
Die Codekopie lautet wie folgt:
öffentliche Klasse CoffeeImpsingleton {
privates statisches Kaffeeps -Kaffeep;
öffentliches CoffeeIpsingleton (Coffeep Coffeepin)
{this.coffeepep = coffeepin;}
public static coffeeps getthecoffeimp () {
Kaffeep zurückgeben;
}
}
Mal sehen, wie die mittlere Tasse Milch und große Tasse Milch herauskommt:
// die Milch herausnehmen
CoffeeMpsingleton CoffeeIpsingleton = New CoffeeImpsingleton (New MilkcoffeeImp ());
// mittlere Tasse mit Milch
MediumCoffee MediumCoffee = new MediumCoffee ();
MediumCoffee.Pourcoffee ();
// eine große Tasse Milch
SuperSizeCoffee Supersizecoffee = new SuperSizeCoffee ();
supersizecoffee.pourcoffee ();
Hinweis: Ausführungskurse von Brückenschema wie Kaffeeps und Kaffee sind einzelne Beziehungen, und die korrekte Erstellung von Kaffeeps ist der Schlüssel zu diesem Schema.
Anwendung des Brückenmodus in EJB
In EJB gibt es ein DAO -Muster (Data Access Object), das die Geschäftslogik von bestimmten Datenressourcen trennt, da verschiedene Datenbanken unterschiedliche Datenbankvorgänge haben. Die Verhaltensweisen, die unterschiedliche Datenbanken betreiben, werden unabhängig in eine Verhaltensschnittstelle DAO abstrahiert, wie folgt:
1.Business -Objekt (ähnlich wie Kaffee)
Implementieren Sie einige abstrakte Geschäftsabläufe: wie die Suche nach einem Benutzer, um alle Bestellungen aufzugeben. DaoImplementor wird für Datenbankvorgänge verwendet.
2.Data -Zugangsobjekt (ähnlich wie Coffeep)
Einige abstrakte Operationen über Datenbankressourcen.
3.. DaoImplementor wie Orderdaocs, Orderdaooracle, OrderdaOSyBase (ähnlich wie bei Milkcoffeepep -duftendcoffeep))
Bestimmte Datenbankvorgänge, wie z. B. "Einfügen in" und andere Aussagen, ist OrderDaooracle Oracle Orderdaosybase ist die Sybase -Datenbank.
4.