Bridge Pattern ::将抽象与实现分离,以便两者可以独立变化

时间:2017-06-13 11:04:55

标签: design-patterns

在Bridge模式中,我已阅读“将抽象与实现分离,以便两者可以独立变化”。这是什么意思?这个短语与下面给出的Bridge模式示例有什么关系? 我理解这段代码,但无法将此代码与短语联系起来。任何人都可以解释这个。

感谢。

/* 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

1 个答案:

答案 0 :(得分:0)

  

“将抽象与实现分离,以便两者可以独立变化”

在这个特定的代码示例中,这意味着Vehicle类仅依赖于Gear接口,而不依赖于它的具体实现。这使合同(各种车辆如何使用各种齿轮,即通过调用handleGear())从不同类型齿轮的私人实施中解耦。

在更实际的术语中,它意味着对Gear实现的更改不需要重新编译定义Vehicle的代码,只要接口保持不变即可。您可以完美地添加新类型的齿轮并将其传递给相同的现有车辆 - 合同不变,实际的实施可以在运行时确定。

同样适用于Vehicle:您可以继续更改它们的私有实现,只要使用Gear的方式不会改变。因此,GearVehicle实现都可以独立变化。