首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Java 設計模式:外觀模式(Facade Pattern)簡化複雜系統

     編輯:Java 相關知識

什麼是外觀模式?

外觀模式屬於結構型模式,為子系統中的一組介面提供一個統一的高層介面,使子系統更易於使用。它不封裝子系統,只是提供一個簡化的入口,客戶端仍可直接訪問子系統。

痛點:JDBC 代碼的重複與脆弱

每次操作資料庫都要寫:載入驅動、獲取連接、創建 Statement、處理 ResultSet、關閉資源... 代碼冗長、易出錯、難維護。切換資料庫(MySQL→Oracle)更需修改所有調用處。

外觀模式重構

// 1. 定義統一外觀介面
public interface DbFacade {
    Connection getConnection() throws SQLException;
    void close(Connection conn, Statement stmt, ResultSet rs);
    // 可添加 executeQuery, executeUpdate 等便利方法
}

// 2. MySQL 實現
public class MysqlFacade implements DbFacade {
    private static final String URL = "jdbc:mysql://...";
    private static final String USER = "root";
    private static final String PASS = "123456";
    static { Class.forName("com.mysql.jdbc.Driver"); }
    public Connection getConnection() { return DriverManager.getConnection(URL, USER, PASS); }
    public void close(Connection c, Statement s, ResultSet r) { /* 統一關閉邏輯 */ }
}

// 3. 客戶端極度簡化
public class Client {
    public void query() {
        DbFacade db = new MysqlFacade(); // 或從工廠獲取
        Connection conn = db.getConnection();
        PreparedStatement ps = conn.prepareStatement("SELECT * FROM t WHERE id=?");
        ps.setString(1, "100");
        ResultSet rs = ps.executeQuery();
        // 處理結果...
        db.close(conn, ps, rs);
    }
}

進階:整合連接池

只需修改 MysqlFacade 內部實現(如整合 HikariCP/Druid),客戶端代碼零修改即可享受連接池性能提升。

優缺點

優點缺點
極大簡化客戶端調用可能違反單一職責(外觀類過於臃腫)
解耦客戶端與子系統若客戶端需深度定制,外觀反成阻礙
便於分層架構(如 Service 層作為 Facade)

實戰場景

  • JDBC、文件處理、網絡通訊等繁瑣 API 的封裝。
  • 微服務網關(API Gateway)本質是系統級外觀。
  • 三方 SDK 封裝(支付、推送、存儲)。

外觀模式不神秘,你可能已在無意識中使用。關鍵在於識別「高頻、固定組合」的操作序列,將其封裝為語義清晰的單一介面。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved