サーチ…


Javaでのブリッジパターンの実装

ブリッジ・パターンは、抽象化を実装から切り離して、両方を独立して変更できるようにします。それは継承よりもむしろ構成で達成されています。

ウィキペディアのBridge UML図:

ここに画像の説明を入力

このパターンには4つの要素があります。

Abstraction :それはインタフェースを定義する

RefinedAbstraction :抽象化を実装しています:

ImplementorImplementorためのインタフェースを定義する

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

説明:

  1. Vehicleは抽象である。
  2. CarTruckは、 Vehicle 2つの具体的な実装です。
  3. Vehicleは抽象メソッドaddGear()定義します。
  4. Gearは実装者インターフェイスです
  5. ManualGearAutoGearは、 Gear 2つの実装です
  6. Vehicleは、インタフェースを実装するのではなく、 implementorインタフェースが含まimplementorています。 implementorインタフェースのCompositonは、このパターンの要点です。抽象化と実装を独立して行うことができます。
  7. CarTruck抽象化のための実装(再定義抽象化)を定義しますaddGear()これは、含まれているGear -のいずれかをManualまたはAuto

ブリッジパターンのユースケース

  1. 抽象化実装は互いに独立して変更でき、コンパイル時にバインドされません
  2. 直交階層のマップ - 抽象化実装のための1つ


Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow