主要是为了将抽象和实现行为分开来
传统方法解决这个问题的时候每次增加一个品牌或者手机类型都会导致要增加三个类别的手机,比如增加中兴品牌就要增加中兴的折叠,直立和选择
给定接口Brand和它的两个实现类
/** * @author wuyimin * @create 2021-07-26 16:22 * @description 品牌的接口 */ public interface Brand { public void show(); } public class HuaWei implements Brand { @Override public void show() { System.out.println("这是华为手机"); } } public class XiaoMi implements Brand { @Override public void show() { System.out.println("这是小米手机"); } }
使用聚合的方式将brand放入抽象类phoneType中
public abstract class PhoneType { //引入手机接口 private Brand brand; public Brand getBrand() { return brand; } public void setBrand(Brand brand) { this.brand = brand; } public PhoneType(Brand brand) { this.brand = brand; } public void showInfo(){ brand.show(); } }
子类重写/或者调用父类的方法
/** * @author wuyimin * @create 2021-07-26 16:27 * @description 触摸式手机 */ public class TouchPhone extends PhoneType { public TouchPhone(Brand brand) { super(brand); } @Override public void showInfo() { System.out.print("触摸式手机--"); super.showInfo(); } }
/** * @author wuyimin * @create 2021-07-26 16:30 * @description 折叠式手机 */ public class FolderPhone extends PhoneType { public FolderPhone(Brand brand) { super(brand); } @Override public void showInfo() { System.out.print("折叠式手机--"); super.showInfo(); } }
桥接模式的优点:
实现了抽象和实现部分的分离,从而极大的提供了系统的灵活性,替代了多层继承的方案,可以减少子类的个数,降低系统的管理和维护成本