定义
桥接模式,可以将抽象与实现分离,使二者可以各自单独变化而不受对方约束,当使用的时候再将他们组合起来,如此降低了抽象与实现这两个可变维度的耦合度,以保证系统的可扩展性
使用场景
平常我们在买手机的时候,手机一般会有不同的规格配置,不同的颜色,例如:8GB+128GB(黑色)、8GB+128GB(白色)、8GB+128GB(红色)等,从这些组合可以看出,规格配置的数量为m,颜色的数量为n,进行组合,得到的数量即m*n
,如果将这种情况应用到系统中,随着产品规格配置和颜色不断增加,产生的类会越来越多,这时我们使用桥接模式将类的数量渐少为m+n个。下面我们来看看桥接模式的实现方式。
分析上面的组合,我们可以知道,手机有多种规格配置,同样也有多种颜色,但是手机的这两种属性是可以独立存在,互不影响。因此,我们可以将其分别抽象出来,通过桥接模式将它们联系起来,减少两个可变维度的耦合度。
代码实现
color接口,为手机的各种颜色实现留好了接口。假设一种颜色对应一个类,那么应该有白色、黑色、红色等
public interface Color {
void color();
}
Color子类,实现Color接口,并重写color方法
public class BlackColor implements Color{
@Override
public void color() {
System.out.println("黑色");
}
}
public class WhiteColor implements Color{
@Override
public void color() {
System.out.println("白色");
}
}
在手机抽象类引用Color接口,将不同规格配置的手机与不同的颜色联系起来
public abstract class Phone {
protected Color color;
public Phone(Color color) {
this.color = color;
}
abstract void properties();
}
手机子类,实现其抽象方法
public class S1Phone extends Phone {
public S1Phone(Color color) {
super(color);
}
@Override
void properties() {
color.color();
System.out.println("+128GB手机");
}
}
至此我们可以随意的组合出不同规格配置的不同颜色的手机,实现了抽象与实现之间的解耦,提升了系统的可扩展性。
public class Client {
public static void main(String[] args) {
new S1Phone(new BlackColor()).properties();
new S1Phone(new WhiteColor()).properties();
// 打印结果
// 黑色+128GB手机
// 白色+128GB手机
}
}
以上就是桥接模式的所有内容,我将持续更新设计模式,欢迎大家一起交流😁