java 橋接模式實現程式碼

BeanInJ發表於2021-12-01

寫在前面

橋接模式:將抽象與實現分離,使它們可以獨立變化。它是用組合/聚合關係代替繼承關係來實現,從而降低了抽象和實現這兩個可變維度的耦合度。

使用場景1:要繪製矩形、圓形、橢圓、正方形,繪製的圖形需要具有不同的顏色,如紅色、綠色、藍色等,我們可以設計顏色和形狀兩個變化維度:

我們設計一個抽象化角色"顏色",然後讓紅色、綠色、藍色統一繼承自"顏色",讓矩形、圓形、橢圓、正方形統一繼承自一個介面"形狀"。"顏色"的構造方法中傳入"形狀"這個介面,這樣"顏色"和"形狀"就橋接起來了

使用場景2:手機、電腦、電視都需要接收訊息,訊息又分為緊急訊息、普通訊息,這時候我們就可以把"系統"和"訊息"抽象出來橋接。如下有具體實現程式碼

在這裡插入圖片描述

1、橋接模式例項

以不同的系統需要接收不同的訊息為例
在這裡插入圖片描述

1.1、訊息類

抽象訊息類

public abstract class AbstractMessage {
    //持有一個實現部分的物件
    MessageImplementor impl;
    public AbstractMessage(MessageImplementor impl){
        this.impl = impl;
    }
    /**
     * 傳送訊息,委派給實現部分的方法
     * @param message    要傳送訊息的內容
     * @param toUser    訊息的接受者
     */
    public void sendMessage(String message , String toUser){
        this.impl.send(message, toUser);
    }
}

普通訊息

public class CommonMessage extends AbstractMessage {

    public CommonMessage(MessageImplementor impl) {
        super(impl);
    }
    @Override
    public void sendMessage(String message, String toUser) {
        // 對於普通訊息,直接呼叫父類方法,傳送訊息即可
        super.sendMessage(message, toUser);
    }
}

緊急訊息

public class UrgencyMessage extends AbstractMessage {

    public UrgencyMessage(MessageImplementor impl) {
        super(impl);
    }
    @Override
    public void sendMessage(String message, String toUser) {
        message = "加急:" + message;
        super.sendMessage(message, toUser);
    }
    /**
     * 擴充套件自己的新功能,監控某訊息的處理狀態
     * @param messageId    被監控的訊息編號
     * @return    監控到的訊息的處理狀態
     */
    public Object watch(String messageId) {
        // 根據訊息id獲取訊息的狀態,組織成監控的資料物件,然後返回
        return null;
    }
}

1.2、系統類

系統介面

public interface MessageImplementor {
    /**
     * 傳送訊息
     * @param message 要傳送訊息的內容
     * @param toUser  訊息的接受者
     */
    public void send(String message , String toUser);
}

手機

public class Phone implements MessageImplementor {

    @Override
    public void send(String message, String toUser) {
        
        System.out.println("使用系統內短訊息的方法,傳送訊息'"+message+"'給"+toUser);
    }

}

電腦

public class Pc implements MessageImplementor {

    @Override
    public void send(String message, String toUser) {
        System.out.println("使用郵件短訊息的方法,傳送訊息'"+message+"'給"+toUser);
    }

}

1.3、使用

public class Client {

    public static void main(String[] args) {
        // 手機傳送
        MessageImplementor impl = new Phone();
        AbstractMessage message = new CommonMessage(impl);
        message.sendMessage("加班申請速批--來自手機","李總");
        
        // 電腦傳送
        impl = new Pc();
        message = new UrgencyMessage(impl);
        message.sendMessage("加班申請速批---來自電腦","李總");
    }

}

2、JDBC

在java中jdbc是使用橋接模式實現的
在這裡插入圖片描述

2.1、jdbc連線例項

import java.sql.*;

public class JdbcTest {

    public static void main(String[] args) throws ClassNotFoundException, SQLException{
        // 需要匯入mysql-connector-java-8.0.27.jar,資料庫test、使用者名稱root,密碼root
        Class.forName("com.mysql.cj.jdbc.Driver");
        Connection conn = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/test","root","root");
        PreparedStatement ps = conn.prepareStatement("SELECT * FROM user");
        ResultSet rs = ps.executeQuery();
        if (rs.next()) {
            System.out.println("id :"+rs.getInt("id")+",name :"+rs.getInt("id"));
        }
        rs.close();
        ps.close();
    }
}

相關文章