桥接模式:将实现与抽象放在两个不同的类层次中,使两个层次可以独立改变。不会发生N*N的 类扩展
具体例子:手机的型号分为折叠手机和直排手机,手机品牌也分为很多种,未来这两个都可能无限扩展。phone和brand组成了“桥”
上代码:
//定义手机品牌类
public interface Brand {
void open();
void close();
void call();
}
//定义phone 组合brand类
public abstract class Phone {
//组合品牌
private Brand brand;
//构造器
public Phone(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 Xiaomi implements Brand {
@Override
public void open() {
System.out.println("小米手机开机");
}
@Override
public void close() {
System.out.println("小米手机开机");
}
@Override
public void call() {
System.out.println("小米手机打电话");
}
}
public class Huawei implements Brand {
@Override
public void open() {
System.out.println("华为手机开机");
}
@Override
public void close() {
System.out.println("华为手机关机");
}
@Override
public void call() {
System.out.println("华为手机打电话");
}
}
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 Client {
public static void main(String[] args) {
Phone phone = new FoldedPhone(new Xiaomi());
phone.open();
phone.close();
phone.call();
Phone phone2 = new FoldedPhone(new Huawei());
phone2.open();
phone2.call();
phone2.close();
}
}
输出结果:
小米手机开机
折叠样式的手机
小米手机开机
折叠样式的手机
小米手机打电话
折叠样式的手机
华为手机开机
折叠样式的手机
华为手机打电话
折叠样式的手机
华为手机关机
折叠样式的手机