桥接模式是一种结构型模式,它主要应对的是:由于实际的需要,某个类具有两个或两个以上的维度变化,如果只是用继承将无法实现这种需要,或者使得设计变得相当臃肿。
桥接模式的做法是把变化部分抽象出来,使变化部分与主类分离开来,从而将多个维度的变化彻底分离。最后,提供一个管理类来组合不同维度上的变化,通过这种组合来满足业务的需要。
解决问题:将抽象化和实例化进行解耦,使它们能各自独立扩展,而不互相影响。
示例:一份礼物,我们可以选择不同的商品和不同的包装盒组合一份礼物。
public abstract class Box {
public abstract String getColor();
}
public class GreenBox extends Box{
@Override
public String getColor() {
return "green";
}
}
public class RedBox extends Box{
@Override
public String getColor() {
return "red";
}
}
public abstract class Goods {
private Box box;
public Goods(Box box) {
this.box = box;
}
abstract void setType();
public Box getBox() {
return box;
}
}
public class Phone extends Goods {
public Phone(Box box) {
super(box);
}
public void setType(){
System.out.println("手机使用" + super.getBox().getColor());
}
}
public class Watch extends Goods {
public Watch(Box box) {
super(box);
}
public void setType(){
System.out.println("手表使用" + super.getBox().getColor());
}
}
public class Test {
public static void main(String[] args) {
Box box = new RedBox();
Goods goods = new Watch(box);
goods.setType();
}
}