桥接模式

也称为桥梁模式、接口模式或柄体模式, 是讲抽象部分与它的实现部分分离, 使它们均可以独立地变化
特征: 经过组合的方式创建两个类之间的联系, 而不是继承; 属于结构型模式数据库

适用场景:
    一、 在抽象和具体实现之间须要增长更多的灵活性的场景
    二、一个类存在两个(或多个)独立变化的维度, 而这两个(或多个)维度都须要独立进行扩展
    三、不但愿适用继承,或由于多层继承致使系统类的个数剧增ide

public interface ICourse {
}
public interface INote {

    void edit();
}
public interface IVideo {

}
public class AbstractCourse implements ICourse{

    private INote note;

    private IVideo video;

    public void setNote(INote note) {
        this.note = note;
    }

    public void setVideo(IVideo video) {
        this.video = video;
    }

    @Override
    public String toString() {
        return "AbstractCourse{" +
                "note=" + note +
                ", video=" + video +
                '}';
    }
}
public class JavaCourse extends AbstractCourse{
}
public class JavaNote implements INote{
    @Override
    public void edit() {

    }
}
public class JavaVideo implements IVideo{
}
public class PythonCourse extends AbstractCourse{
}
public class PythonNote implements INote{
    @Override
    public void edit() {

    }
}
public class PythonVideo implements IVideo{
}

======================================================================================this

public interface IMessage {

    /**
     * 发送消息的内容和接收人
     * @param message
     * @param toUser
     */
   void send(String message, String toUser);
}
public class EmailMessage implements IMessage{
    @Override
    public void send(String message, String toUser) {
        System.out.println("使用邮件消息发送" + message + "" + toUser);
    }
}
public class SmsMessage implements IMessage{
    @Override
    public void send(String message, String toUser) {
        System.out.println("使用短信消息发送" + message + "" + toUser);
    }
}
public abstract class AbstractMessage {

   private IMessage message;

    public AbstractMessage(IMessage message) {
        this.message = message;
    }

    void sendMessage(String message, String toUser){
        this.message.send(message, toUser);
    }
}
public class NomalMessage extends AbstractMessage{
    public NomalMessage(IMessage message) {
        super(message);
    }
}
public class UrgencyMessage extends AbstractMessage{
    public UrgencyMessage(IMessage message) {
        super(message);
    }

    @Override
    void sendMessage(String message, String toUser){
        message = "【加急】" + message;
        super.sendMessage(message,toUser);
    }

    public Object watch(String messageId){
        return null;
    }
}
public static void main(String[] args) {
    IMessage message = new SmsMessage();
    AbstractMessage abstractMessage = new NomalMessage(message);
    abstractMessage.sendMessage("调休申请","李总");

    message = new EmailMessage();
    abstractMessage = new UrgencyMessage(message);
    abstractMessage.sendMessage("调休申请","李总");
}

优势:
    1、分离抽象部分及其具体实现部分
    2、提升了系统的扩展性
    3、符合开闭原则
    4、符合合成复用原则
缺点;
    1、增长了系统的理解和设计难度
    2、须要正确地识别系统中两个独立变化的维度
    源码中的运用: Java代码操做MySQL数据库, 经过 DriverManagerspa