桥接模式浅谈

107 阅读2分钟

「这是我参与2022首次更文挑战的第19天,活动详情查看:2022首次更文挑战」。

一、什么是桥接模式

桥接模式是指将抽象部分与实际部分解耦,使得二者都可以单独的变化。

桥接模式中的几种角色的介绍:

  1. implementor:行为实现接口
  2. ConcreateImplementor: 行为实现接口的实现类或者子类。
  3. abstraction:抽象类接口,对implementor的使用
  4. refined abstraction:abstraction的子类

二、桥接模式的实现

public interface MobileSystem {

    void runSystem();
}

implementor,此处是运行系统接口。

public class XmMobileSystem implements MobileSystem{
    @Override
    public void runSystem() {
        System.out.println("运行xm系统");
    }
}

ConcreateImplementor,对implementor的实现,运行xm系统。

public class OppoMobileSystem implements MobileSystem{
    @Override
    public void runSystem() {
        System.out.println("运行oppo系统");
    }
}

ConcreateImplementor,运行oppo系统

public abstract class Mobile {
    protected MobileSystem mobileSystem;

    public Mobile(MobileSystem mobileSystem){
        this.mobileSystem = mobileSystem;
    }

    public abstract void run();
}

abstraction,对手机系统(implementor)的使用,使得具体手机不用通过引用具体的类来表明要使用什么系统。

public class XmMobile extends Mobile {
    public XmMobile(MobileSystem mobileSystem) {
        super(mobileSystem);
    }

    @Override
    public void run() {
        System.out.print("xm手机:");
        this.mobileSystem.runSystem();
    }
}

refined abstraction,具体的手机。

public class OppoMobile extends Mobile {
    public OppoMobile(MobileSystem mobileSystem) {
        super(mobileSystem);
    }

    @Override
    public void run() {
        System.out.print("oppo手机:");
        this.mobileSystem.runSystem();
    }
}

refined abstraction,具体的手机。

public static void main(String[] args) {
    XmMobileSystem xmMobileSystem = new XmMobileSystem();
    Mobile xmMobile = new XmMobile(xmMobileSystem);
    xmMobile.run();
    OppoMobileSystem oppoMobileSystem = new OppoMobileSystem();
    Mobile oppoMobile = new OppoMobile(oppoMobileSystem);
    oppoMobile.run();
}

我们的手机引用的是抽象的系统,使得我们可以等到要使用的时候再传入系统。而且我们可以方便的新增其它系统和手机。

image.png

三、总结

优点: 抽象和实现分离,降低了系统的耦合性;并且系统扩展性良好。

缺点:系统的设计变得更加艰难,同时也增加了理解的难度,因为是对抽象的部分进行设计。

我个人对桥接模式的理解:以抽象的接口和抽象的类为桥梁,而不是具体类之间相互操作或者组合,通过抽象类的聚合,实现了具体类的聚合。

如有错误,请大佬指正。