接口是類的標記與契約,體現「抽去像的部分」——定義做什麼,不關心怎麼做。統一管理不同實現類,實現面向接口編程,降低耦合。
需提供通用數據庫連接組件,支持 Oracle、MySQL、SQL Server 等。
痛點: 1) 每個類重復代碼;2) 編譯時無法確定用戶用哪種數據庫。
public interface DataBase {
Connection openDB(String url, String user, String password);
void close();
}
public class MySQLImpl implements DataBase {
private String url = "jdbc:mysql://localhost:3306/test";
private String user = "root";
private String password = "";
private Connection conn;
public Connection openDB(String url, String user, String password) {
// 加載驅動、建立連接...
return conn;
}
public void close() { /* 關閉連接 */ }
}
// OracleImpl、SQLServerImpl 同理實現 DataBase
public class DBFactory {
public static DataBase getConnection() {
// 可讀取配置文件動態決定
return new MySQLImpl();
}
}
DataBase db = DBFactory.getConnection();
Connection conn = db.openDB(url, user, pass);
// 使用連接...
db.close();
客戶端完全面向 DataBase 接口,無感知具體實現。工廠內部切換實現類,客戶端代碼零修改。