概述
桥接模式是将抽象部分与他的实现部分分离,使得他们可以独立变化。
像这样的就很繁琐,这样设计扩展就会很有问题,违反单一继承原则
所有我们可以把他们拆开来
代码实现
品牌接口
//定义品牌接口
public interface Brand {
void info();
}
品牌实现类1
public class Apple implements Brand{
@Override
public void info() {
System.out.print("苹果");
}
}
品牌实现类2
public class Lenovo implements Brand{
@Override
public void info() {
System.out.print("联想");
}
}
定义抽象电脑类
//抽象电脑类
public abstract class Computer {
//组合品牌
protected Brand brand; //protect子类继承父类的时候可以用到
public Computer(Brand brand) {
this.brand = brand;
}
public void info(){
//自带品牌
brand.info();
}
}
定义电脑实现类1
class Desktop extends Computer{
public Desktop(Brand brand) {
super(brand);
}
@Override
public void info() {
super.info();
System.out.println("台式机");
}
}
定义电脑实现类2
class notebook extends Computer{
public notebook(Brand brand) {
super(brand);
}
@Override
public void info() {
super.info();
System.out.println("笔记本");
}
}
测试类
public class test {
public static void main(String[] args) {
//苹果笔记本
Computer computer = new notebook(new Apple());
//联系台式机
Computer computer2 = new Desktop(new Lenovo());
computer.info();
computer2.info();
}
}
总结
好处分析
- 桥接模式比最上面那个多类模式比,极大的减少了子类的个数,从而降低管理和维护成本
- 桥接模式提高系统的可扩充性,在变化维度中任意扩展一个维度,都不需要修改原有系统,符合开闭原则。
最佳实践
- 如果一个类两个独立变化的维度,而且两个维度都需要扩展
- 需要在抽象角色和具体化角色之间增加更多灵活性,避免两层次之间建立静态的继承关系,则可以使用桥接
场景
- Java语言通过虚拟机实现平台无关性(win mac linux)
- JDBC程序驱动 (mysql oracle)