桥模式
定义:将抽象化与实现化脱耦,使得两者可以独立地变化。也就是在一个软件系统的抽象化和实现化之间使用组合关系而不是继承关系。从而使两者可以独立地变化。
优点:桥模式能提供比继承关系更灵活的功能,当有新的抽象或者实现方式时只需要集成一个抽象类或者一个实现即可。
缺点:如果重新抽象出另外一个类型,则需要修改抽象。
使用时机:当系统需要在它的抽象和实现之间增加更多的灵活性,或者一个对象有多于一个的抽象和实现时,需要桥模式。
小巩的项目需要为汽车管理所建立一个汽车管理的模型,要求对各个汽车制造商生产的各种汽车进行管理。
如果使用多重继承的方法,类的数量会很多,各种汽车和各个制造商的组合会产生很多类。怎么解决这个问题?
把汽车作为抽象类,把制造商变成接口
public abstract class Car {
public Car(Manufacturer lnkManufacturer) {
this.lnkManufacturer = lnkManufacturer;
}
public void produce() {
lnkManufacturer.produce();
}
/**
* @directed
*/
Manufacturer lnkManufacturer;
}
public class Bus extends Car {
public Bus(Manufacturer lnkManufacturer) {
super(lnkManufacturer);
}
public void produce() {
lnkManufacturer.produce();
System.out.println("的公共汽车");
}
}
public class Truck extends Car {
public Truck(Manufacturer lnkManufacturer) {
super(lnkManufacturer);
}
public void produce() {
lnkManufacturer.produce();
System.out.println("的货车");
}
}
public interface Manufacturer {
void produce();
}
public class Dfmc implements Manufacturer {
public void produce() {
System.out.println("二汽制造");
}
}
public class Faw implements Manufacturer {
public void produce() {
System.out.println("一汽制造");
}
}
如果有新的车型进来,就继承car.java;
如果有新的制造商进来,就实现Manufacturer.java.
下面是客户端调用示例
public class Client {
public static void main(String[] argv) {
Car car = new Bus(new Dfmc());
car.produce();
}
}