橋接模式

也稱爲橋樑模式、接口模式或柄體模式, 是講抽象部分與它的實現部分分離, 使它們均可以獨立地變化
特徵: 經過組合的方式創建兩個類之間的聯繫, 而不是繼承; 屬於結構型模式數據庫

適用場景:
    一、 在抽象和具體實現之間須要增長更多的靈活性的場景
    二、一個類存在兩個(或多個)獨立變化的維度, 而這兩個(或多個)維度都須要獨立進行擴展
    三、不但願適用繼承,或由於多層繼承致使系統類的個數劇增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

相關文章
相關標籤/搜索
本站公眾號
   歡迎關注本站公眾號,獲取更多信息