文章目录
介绍
描述
桥接模式设计模式属于结构型模式,是用于把抽象化和实现化进行解耦,通过提供之间的桥接结构,使得二者独立变化。
特点
优点:抽象和实现分离、拓展能力强。
缺点:桥接模式对于增加系统的理解和设计难度。
实现原理
原本的继承方式拓展中可能会造成大量类的生成,且扩展不灵活,将抽象部分于实现部分分离,通过抽象类依赖实现类,做到分离,减少之间的耦合。
适用
-
适合不希望通过继承或者多层次继承导致类个数累加的系统,采用桥接模式。
-
一个类存在两个独立变化的维度,且都需要进行拓展(如:品牌和样式),采用桥接模式。
桥接模式
实现
假设存在产品手机,既需要拓展品牌同时又要针对样式做修改。设置类Brand接口作为桥接实现接口(品牌内容),类Vivo、Xiaomi作为实现类。抽象类Phone作为桥接,类FlowType、FlapType继承抽象类Phone作为手机样式类。
第一步:创建桥接实现接口,类Vivo、Xiaomi作为实现类。
public interface Brand {
void getBrand();
}
public class Vivo implements Brand{
@Override
public void getBrand() {
System.out.println("Brand => Vivo ");
}
}
public class Xiaomi implements Brand{
@Override
public void getBrand() {
System.out.println("Brand => Xiao Mi ");
}
}
第二步:创建桥接抽象类,类FlowType、FlapType继承抽象类。
public abstract class Phone {
private Brand brand;
public Phone(Brand brand) {
this.brand = brand;
}
public void getInfo(){
brand.getBrand();
}
}
public class FlapType extends Phone{
public FlapType(Brand brand) {
super(brand);
}
@Override
public void getInfo() {
System.out.println("==== FlapType ====");
super.getInfo();
}
}
public class FlowType extends Phone{
public FlowType(Brand brand) {
super(brand);
}
@Override
public void getInfo() {
System.out.println("==== FlowType ====");
super.getInfo();
}
}
第三步:测试。
public class Test {
public static void main(String[] args) {
Phone Vivo = new FlowType(new Vivo());
Vivo.getInfo();
Phone Xiaomi = new FlapType(new Xiaomi());
Xiaomi.getInfo();
/*
结果:
==== FlowType ====
Brand => Vivo
==== FlapType ====
Brand => Xiao Mi
*/
}
}