【问题标题】:Bridge Pattern:: decouples abstraction from implementation so that both can vary independently [duplicate]桥接模式:: 将抽象与实现分离,以便两者都可以独立变化 [重复]
【发布时间】:2017-11-15 03:05:33
【问题描述】:

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

谢谢。

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

【问题讨论】:

    标签: design-patterns


    【解决方案1】:

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

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

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

    Vehicle 也是如此:只要Gear 的使用方式不变,您就可以不断更改它们的私有实现。因此,GearVehicle 的实现可以独立变化。

    【讨论】:

    • 您好 Alexander Tsvetkov,感谢您的回复。我认为这是最好的答案。现在我能够完全理解这个概念了。再次感谢。
    • @mukeshsingh,我很高兴它有帮助!请考虑投票并将答案标记为已接受。
    • 为什么不是亚历山大!我会乖乖地这样做,但怎么办?我是stackoverflow的新手。不知道投票以及如何标记为已接受。
    猜你喜欢
    • 2016-05-06
    • 2014-01-08
    • 2012-06-02
    • 2014-11-06
    • 1970-01-01
    • 2013-05-31
    • 1970-01-01
    • 2014-11-08
    • 2021-07-10
    相关资源
    最近更新 更多