将抽象类和实现类进行分离,避免了类的多层继承带来的类爆炸。分离之后就可以自由组合实现类和实现类的方法这样便于扩展功能。
比如手机有很多的品牌,每个品牌都有不同类型的手机。如果如果加一个品牌那么对于多种类型也要复制一遍。这样就很不灵活。如果使用桥接模式就可以直接扩展一个品牌类,然后和抽象类进行组合即可。只需要一个类就够了。
直接看代码:
这里将手机作为抽象类也是桥接类,将品牌作为实现类。
首先定义品牌类:
public interface Brand {
void open();
void close();
void call();
}
public class Xiaomi implements Brand {
@Override
public void open() {
System.out.println("Xiaomi 手机 开机");
}
@Override
public void close() {
System.out.println("Xiaomi 手机 关机");
}
@Override
public void call() {
System.out.println("Xiaomi 手机 打电话");
}
}
public class Vivo implements Brand {
@Override
public void open() {
System.out.println("Vivo 手机开机方式");
}
@Override
public void close() {
System.out.println("Vivo 手机关机");
}
@Override
public void call() {
System.out.println("Vivo 手机打电话");
}
}
再定义抽象类
public abstract class Phone {
private Brand brand;
public Phone(Brand brand) {
this.brand = brand;
}
public Brand getBrand() {
return brand;
}
public void setBrand(Brand brand) {
this.brand = brand;
}
protected void open() {
this.brand.open();
}
protected void close() {
this.brand.close();
}
protected void call() {
this.brand.call();
}
}
public class FoldedPhone extends Phone {
public FoldedPhone(Brand brand) {
super(brand);
}
public void open() {
super.open();
System.out.println("折叠式手机");
}
public void close() {
super.close();
System.out.println("折叠式手机");
}
public void call() {
super.call();
System.out.println("折叠式手机");
}
}
public class UpPhone extends Phone {
public UpPhone(Brand brand) {
super(brand);
}
public void open(){
super.open();
System.out.println("直立式手机");
}
public void close(){
super.close();
System.out.println("直立式手机");
}
public void call(){
super.call();
System.out.println("直立式");
}
}
调用端:
public class Client {
public static void main(String[] args) {
Phone phone=new FoldedPhone(new Vivo());
phone.open();
phone.call();
phone.close();
Phone phone1=new FoldedPhone(new Xiaomi());
phone1.open();
phone1.call();
phone1.close();
Phone phone2=new UpPhone(new Xiaomi());
phone2.open();
phone2.call();
phone2.close();
}
}



