核心思想
- 适配器模式类似,以后也会遇到意思接近一样的设计模式。在开发中一般多个模式混用,且根据不同的场景进行搭配,桥接模式也是结构型模式
- 将抽象的部分和实现的部分分离,使它们都可以独立的变化。通俗来说,就是通过组合来桥接其它的行为或维度
与适配器模式业务场景对比
- 桥接模式用与设计前期,精细化设计,让系统更加灵活
- 适配器模式用与设计完成之后,发现类、接口之间无法一起工作,需要进行填坑
场景使用
- 系统需要在构建的抽象化角色和具体角色之前增加更多的灵活性
- 不想使用继承导致系统类的个数急剧增加
- 有个时候一个类,可能会拥有多个变化维度,比如手机,有不同的品牌和颜色,可以使用继承组合的方式进行开发,假如维度很多,就容易出现类的膨胀,使用桥接模式就可以解决这个问题,而且解耦
继承方式
桥接模式
优缺点
优点
缺点
- 使用聚合关联关系建立在抽象层,要求开发者针对抽象进行设计和编程
- 增加系统的理解和设计难度
代码示例
颜色接口
public interface Color {
void useColor();
}
颜色接口实现
public class RedColor implements Color {
@Override
public void useColor() {
System.out.println("红色");
}
}
public class WhiteColor implements Color {
@Override
public void useColor() {
System.out.println("白色");
}
}
public class BlackColor implements Color {
@Override
public void useColor() {
System.out.println("黑色");
}
}
手机抽象类
public abstract class Phone {
/**
* 组合的方式来桥接其它行为
*/
protected Color color;
public void setColor(Color color) {
this.color = color;
}
/**
* 手机的方法
*/
abstract public void run();
}
扩展维度
public class ApplePhone extends Phone {
public ApplePhone(Color color){
super.setColor(color);
}
@Override
public void run() {
color.useColor();
System.out.println("苹果手机");
}
}
public class XMPhone extends Phone {
public XMPhone(Color color){
super.setColor(color);
}
@Override
public void run() {
color.useColor();
System.out.println("小米手机");
}
}
public class HWPhone extends Phone {
public HWPhone(Color color){
super.setColor(color);
}
@Override
public void run() {
color.useColor();
System.out.println("华为手机");
}
}
测试
public class AppRun {
public static void main(String[] args) {
ApplePhone applePhone = new ApplePhone(new RedColor());
applePhone.run();
System.out.println("====================");
HWPhone blueHwPhone = new HWPhone(new BlackColor());
blueHwPhone.run();
System.out.println("====================");
HWPhone redHwPhone = new HWPhone(new RedColor());
redHwPhone.run();
}
}