简介
将抽象部分与它的实现部分分离,使它们可以独立变化。
UML图:
 
 应用场景:
- 系统需要在构建的抽象化角色和具体化角色之间增加更多的灵活性
 - 不想使用继承导致系统类的个数急剧增加
 - 某个类存在多个变化维度使用继承方式容易出现类的膨胀
 
示例
手机厂商和软件厂商
- 实现类:软件
 
public interface Software {
    /**
     * 运行
     */
    void run();
}
 
1.1 具体实现类:
public class MusicSoftware implements Software{
    @Override
    public void run() {
        System.out.println("运行 音乐软件");
    }
}
 
public class GameSoftware implements Software {
    @Override
    public void run() {
        System.out.println("运行 游戏软件");
    }
}
 
- 抽象类:手机
 
public abstract class Phone {
    protected Software software;
    public Phone(Software software) {
        this.software = software;
    }
    /**
     * 使用
     */
    public abstract void use();
}
 
2.1 实现类:
public class AndroidPhone extends Phone {
    public AndroidPhone(Software software) {
        super(software);
    }
    @Override
    public void use() {
        System.out.println("安卓手机....");
        software.run();
    }
}
 
public class IOSIphone extends Phone {
    public IOSIphone(Software software) {
        super(software);
    }
    @Override
    public void use(){
        System.out.println("苹果手机....");
        software.run();
    }
}
 
- 运行
 
public class Main {
    public static void main(String[] args) {
        Software musicSoftware = new MusicSoftware();
        Software gameSoftware = new GameSoftware();
        new AndroidPhone(musicSoftware).use();
        new IOSIphone(musicSoftware).use();
        new AndroidPhone(gameSoftware).use();
        new IOSIphone(gameSoftware).use();
    }
}
 

总结
- 优点 
  
- 实现抽象和实现的分离,提高系统灵活性
 - 具备良好的扩展性,符合开闭原则
 
 - 缺点 
  
- 增加系统的理解和设计难度
 
 
VS 适配器模式
- 适用阶段不同 
  
- 桥接模式用于设计的前期,精细化的设计,让系统更加灵活
 - 适配器模式用于设计完成之后,发现类、接口之间无法一同工作,需要进行填坑
 
 - 应用场景 
  
- 适配器模式经常用于在第三方API协同工作的场合
 
 


















