在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
答案 0 :(得分:0)
“将抽象与实现分离,以便两者可以独立变化”
在这个特定的代码示例中,这意味着Vehicle
类仅依赖于Gear
接口,而不依赖于它的具体实现。这使合同(各种车辆如何使用各种齿轮,即通过调用handleGear()
)从不同类型齿轮的私人实施中解耦。
在更实际的术语中,它意味着对Gear
实现的更改不需要重新编译定义Vehicle
的代码,只要接口保持不变即可。您可以完美地添加新类型的齿轮并将其传递给相同的现有车辆 - 合同不变,实际的实施可以在运行时确定。
同样适用于Vehicle
:您可以继续更改它们的私有实现,只要使用Gear
的方式不会改变。因此,Gear
和Vehicle
实现都可以独立变化。