将抽象与实现分离,使它们可以独立变化。它是用组合关系代替继承关系来实现,从而降低了抽象和实现这两个可变维度的耦合度。
【使用场景】
- 一个系统需要在构建的抽象化角色和具体化角色间增加更多灵活性,避免在两个层次间建立静态继承关系,可以通过桥接模式使他们在抽象层建立一个关联关系。
- 一个类存在两个独立变化的维度,且两个维度都需要扩展。
对于不希望使用继承或因多层次继承导致系统类的个数急剧增加的系统,也可使用桥接模式。
/*** 品牌*/public interface Brand {String explain();}
/*** vivo品牌*/public class VivoBrand implements Brand {@Overridepublic String explain() {return "vivo";}}
/*** 小米品牌*/public class XiaoMiBrand implements Brand {@Overridepublic String explain() {return "小米";}}
/*** 手机*/public abstract class Phone {/*** 品牌*/protected Brand brand;public Phone(Brand brand) {this.brand = brand;}abstract void call();}
/*** 折叠手机*/public class FoldPhone extends Phone {public FoldPhone(Brand brand) {super(brand);}@Overridepublic void call() {System.out.println(brand.explain() + "折叠手机打电话");}}
/*** 滑盖手机*/public class SlidePhone extends Phone {public SlidePhone(Brand brand) {super(brand);}@Overridepublic void call() {System.out.println(brand.explain() + "滑盖手机打电话");}}
public class BridgeTest {public static void main(String[] args) {// 小米折叠手机Phone xiaoMiFoldPhone = new FoldPhone(new XiaoMiBrand());xiaoMiFoldPhone.call();// 小米滑盖手机Phone xiaoMiSlidePhone = new SlidePhone(new XiaoMiBrand());xiaoMiSlidePhone.call();// vivo折叠手机Phone vivoFoldPhone = new FoldPhone(new VivoBrand());vivoFoldPhone.call();// vivo滑盖手机Phone vivoSlidePhone = new SlidePhone(new VivoBrand());vivoSlidePhone.call();}}----输出----小米折叠手机打电话小米滑盖手机打电话vivo折叠手机打电话vivo滑盖手机打电话
