桥接模式:
处理多层继承结构,处理多维度变化的场景,将各个维度设计师成独立的继承结构,使用各个维度可以独立的扩展在抽象层建立关联
以电脑为类,分为电脑类型与电脑品牌两个维度
package designmode.bridge.interfaces;
/**
* 电脑抽象类
* @author baiyi
*
*/
public abstract class Computer {
protected Brand brand;
public Computer(Brand brand) {
this.brand = brand;
}
public abstract void sale();
}
package designmode.bridge.interfaces;
/**
* 品牌接口
* @author baiyi
*
*/
public interface Brand {
public String getName();
}
package designmode.bridge.pojo;
import designmode.bridge.interfaces.Brand;
import designmode.bridge.interfaces.Computer;
public class Desktop extends Computer{
public Desktop(Brand brand) {
super(brand);
}
public void sale() {
System.out.printf("销售%s台式电脑%n",super.brand.getName());
}
}
package designmode.bridge.pojo;
import designmode.bridge.interfaces.Brand;
import designmode.bridge.interfaces.Computer;
public class Laptop extends Computer{
public Laptop(Brand brand) {
super(brand);
}
@Override
public void sale() {
System.out.printf("销售%s笔记本电脑%n",super.brand.getName());
}
}
package designmode.bridge.pojo;
import designmode.bridge.interfaces.Brand;
import designmode.bridge.interfaces.Computer;
public class Pad extends Computer{
public Pad(Brand brand) {
super(brand);
}
@Override
public void sale() {
System.out.printf("销售%s平板电脑%n", super.brand.getName());
}
}
package designmode.bridge.pojo;
import designmode.bridge.interfaces.Brand;
public class Lenovo implements Brand{
private final String NAME = "联想";
@Override
public String getName() {
return this.NAME;
}
}
package designmode.bridge.pojo;
import designmode.bridge.interfaces.Brand;
public class Dell implements Brand{
private final String NAME = "戴尔";
@Override
public String getName() {
return this.NAME;
}
}
package designmode.bridge.test;
import designmode.bridge.interfaces.Computer;
import designmode.bridge.pojo.Dell;
import designmode.bridge.pojo.Desktop;
import designmode.bridge.pojo.Laptop;
import designmode.bridge.pojo.Lenovo;
import designmode.bridge.pojo.Pad;
public class Client {
public static void main(String[] args) {
Computer c = new Laptop(new Lenovo());
c.sale();
Computer c1 = new Desktop(new Lenovo());
c1.sale();
Computer c2 = new Desktop(new Dell());
c2.sale();
Computer c3 = new Pad(new Lenovo());
c3.sale();
}
}
测试结果:

桥接模式可以取代多层继承的方案,多层继承违背了单一职责原则,复用性较差,类的个数也非常多,桥接模式可以极大的减少子类的个数,从而降低管理和维护成本。
桥接模式极大的提高了系统可扩展性,在两个变化维度中任意扩展一个维度,都不需要修改原有的系统,符合开闭原则。