核心思想

  • 适配器模式类似,以后也会遇到意思接近一样的设计模式。在开发中一般多个模式混用,且根据不同的场景进行搭配,桥接模式也是结构型模式
  • 将抽象的部分和实现的部分分离,使它们都可以独立的变化。通俗来说,就是通过组合来桥接其它的行为或维度

与适配器模式业务场景对比

  • 桥接模式用与设计前期,精细化设计,让系统更加灵活
  • 适配器模式用与设计完成之后,发现类、接口之间无法一起工作,需要进行填坑

场景使用

  • 系统需要在构建的抽象化角色和具体角色之前增加更多的灵活性
  • 不想使用继承导致系统类的个数急剧增加
  • 有个时候一个类,可能会拥有多个变化维度,比如手机,有不同的品牌和颜色,可以使用继承组合的方式进行开发,假如维度很多,就容易出现类的膨胀,使用桥接模式就可以解决这个问题,而且解耦

继承方式

设计模式-桥接模式-LMLPHP

桥接模式

设计模式-桥接模式-LMLPHP

优缺点

优点

  • 抽象与实现分离
  • 比较好的扩展能力

缺点

  • 使用聚合关联关系建立在抽象层,要求开发者针对抽象进行设计和编程
  • 增加系统的理解和设计难度

代码示例

颜色接口

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();
    }
}

设计模式-桥接模式-LMLPHP

08-25 14:19