「这是我参与2022首次更文挑战的第19天,活动详情查看:2022首次更文挑战」。
一、什么是桥接模式
桥接模式是指将抽象部分与实际部分解耦,使得二者都可以单独的变化。
桥接模式中的几种角色的介绍:
- implementor:行为实现接口
- ConcreateImplementor: 行为实现接口的实现类或者子类。
- abstraction:抽象类接口,对implementor的使用
- 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();
}
我们的手机引用的是抽象的系统,使得我们可以等到要使用的时候再传入系统。而且我们可以方便的新增其它系统和手机。
三、总结
优点: 抽象和实现分离,降低了系统的耦合性;并且系统扩展性良好。
缺点:系统的设计变得更加艰难,同时也增加了理解的难度,因为是对抽象的部分进行设计。
我个人对桥接模式的理解:以抽象的接口和抽象的类为桥梁,而不是具体类之间相互操作或者组合,通过抽象类的聚合,实现了具体类的聚合。
如有错误,请大佬指正。