2017-06-13 3 views
0

ブリッジパターンでは、は「抽象化を実装から切り離し、両方とも独立して変更できる」と読みました。実際にはどういう意味ですか?このフレーズはどのようにブリッジパターンの例に関連していますか? 私はこのコードを理解していますが、このコードをフレーズに関連付けることはできません。誰もがこれを説明することができます。ブリッジパターン::抽象化を実装から切り離して、両方とも独立して変更できるようにする

ありがとうございました。

/* 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(); 
} 
} 

output 
Car handles Manual gear 
Car handles Auto gear 
Truck handles Manual gear 
Truck handles Auto gear 

答えて

0

この特定のコード例で

「を両方とも独立に変えることができるように、実装から抽象化を切り離す」、これはVehicleクラスのみGearインターフェイスではなく、特定の実装に依存することを意味それの。これにより、契約(さまざまな車両が様々なギアを使用する方法、つまりhandleGear()と呼びます)をさまざまなタイプのギアのプライベートな実装から切り離します。

具体的に言えば、Gear実装への変更では、インターフェイスが同じままである限り、Vehicleが定義されているコードを再コンパイルする必要はありません。新しいタイプのギヤを完全に追加して同じ既存の車両に渡すことができます。契約は変更されず、実行時に実際の実装を決定することができます。

Vehicleの場合も同様です。Gearの使用方法が変更されない限り、そのプライベートな実装を変更することはできます。したがって、GearVehicleの両方の実装は独立して変更できます。

+0

こんにちはAlexander Tsvetkov、返信ありがとうございます。私はこれが最高の答えだと思います。今私はこの概念を完全に理解することができます。もう一度ありがとう。 –

+0

@mukeshsingh、私はそれが助けてうれしい! upvotingと答えを受け入れたとみなしてください。 –

+0

なぜアレクサンダーじゃないの!私はそれをやめようとしますが、どうやって行うのですか?私はstackoverflowで新しいです。 upvotingと受け入れられたとしてマークする方法について知らない。 –

関連する問題