Design patterns
ブリッジパターン
サーチ…
Javaでのブリッジパターンの実装
ブリッジ・パターンは、抽象化を実装から切り離して、両方を独立して変更できるようにします。それは継承よりもむしろ構成で達成されています。
ウィキペディアのBridge UML図:
このパターンには4つの要素があります。
Abstraction
:それはインタフェースを定義する
RefinedAbstraction
:抽象化を実装しています:
Implementor
: Implementor
ためのインタフェースを定義する
ConcreteImplementor
:Implementorインターフェイスを実装します。
The crux of Bridge pattern :
コンポジション(および継承なし)を使用する2つの直交クラス階層。抽象階層と実装階層は独立して変わる可能性があります。実装は決して抽象概念を参照しません。抽象化には、メンバとしての実装インタフェースが含まれています(合成による)。この構成は、もう1つのレベルの継承階層を減らします。
実在単語使用例:
手動および自動ギアシステムの両方のバージョンを持つように異なる車両を有効にします。
コード例:
/* Implementor interface*/
interface Gear{
void handleGear();
}
/* Concrete Implementor - 1 */
class ManualGear implements Gear{
public void handleGear(){
System.out.println("Manual gear");
}
}
/* Concrete Implementor - 2 */
class AutoGear implements Gear{
public void handleGear(){
System.out.println("Auto gear");
}
}
/* Abstraction (abstract class) */
abstract class Vehicle {
Gear gear;
public Vehicle(Gear gear){
this.gear = gear;
}
abstract void addGear();
}
/* RefinedAbstraction - 1*/
class Car extends Vehicle{
public Car(Gear gear){
super(gear);
// initialize various other Car components to make the car
}
public void addGear(){
System.out.print("Car handles ");
gear.handleGear();
}
}
/* RefinedAbstraction - 2 */
class Truck extends Vehicle{
public Truck(Gear gear){
super(gear);
// initialize various other Truck components to make the car
}
public void addGear(){
System.out.print("Truck handles " );
gear.handleGear();
}
}
/* Client program */
public class BridgeDemo {
public static void main(String args[]){
Gear gear = new ManualGear();
Vehicle vehicle = new Car(gear);
vehicle.addGear();
gear = new AutoGear();
vehicle = new Car(gear);
vehicle.addGear();
gear = new ManualGear();
vehicle = new Truck(gear);
vehicle.addGear();
gear = new AutoGear();
vehicle = new Truck(gear);
vehicle.addGear();
}
}
出力:
Car handles Manual gear
Car handles Auto gear
Truck handles Manual gear
Truck handles Auto gear
説明:
-
Vehicle
は抽象である。 -
Car
とTruck
は、Vehicle
2つの具体的な実装です。 -
Vehicle
は抽象メソッドaddGear()
定義します。 -
Gear
は実装者インターフェイスです -
ManualGear
とAutoGear
は、Gear
2つの実装です -
Vehicle
は、インタフェースを実装するのではなく、implementor
インタフェースが含まimplementor
ています。 implementorインタフェースのCompositon
は、このパターンの要点です。抽象化と実装を独立して行うことができます。 -
Car
とTruck
抽象化のための実装(再定義抽象化)を定義しますaddGear()
これは、含まれているGear
-のいずれかをManual
またはAuto
ブリッジパターンのユースケース :
- 抽象化と実装は互いに独立して変更でき、コンパイル時にバインドされません
- 直交階層のマップ - 抽象化と実装のための1つ
Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow