Java設計形式以外不雅形式(Facade形式)引見。本站提示廣大學習愛好者:(Java設計形式以外不雅形式(Facade形式)引見)文章只能為提供參考,不一定能成為您想要的結果。以下是Java設計形式以外不雅形式(Facade形式)引見正文
外不雅形式(Facade)的界說:為子體系中的一組接口供給一個分歧的界面。
Facade一個典范運用就是數據庫JDBC的運用,以下例對數據庫的操作:
public class DBCompare {
Connection conn = null;
PreparedStatement prep = null;
ResultSet rset = null;
try {
Class.forName( "<driver>" ).newInstance();
conn = DriverManager.getConnection( "<database>" );
String sql = "SELECT * FROM <table> WHERE <column name> = ?";
prep = conn.prepareStatement( sql );
prep.setString( 1, "<column value>" );
rset = prep.executeQuery();
if( rset.next() ) {
System.out.println( rset.getString( "<column name" ) );
}
} catch( SException e ) {
e.printStackTrace();
} finally {
rset.close();
prep.close();
conn.close();
}
}
上例是Jsp中最平日的對數據庫操作方法。
在運用中,常常須要對數據庫操作,每次都寫上述一段代碼確定比擬費事,須要將個中不變的部門提煉出來,做成一個接口,這就引入了facade外不雅對象。假如今後我們改換Class.forName中的<driver>也異常便利,好比從Mysql數據庫換到Oracle數據庫,只需改換facade接口中的driver便可以。
我們做成了一個Facade接口,應用該接口,上例中的法式便可以更改以下:
public class DBCompare {
String sql = "SELECT * FROM <table> WHERE <column name> = ?";
try {
Mysql msql=new mysql(sql);
prep.setString( 1, "<column value>" );
rset = prep.executeQuery();
if( rset.next() ) {
System.out.println( rset.getString( "<column name" ) );
}
} catch( SException e ) {
e.printStackTrace();
} finally {
mysql.close();
mysql=null;
}
}
可見異常簡略,一切法式對數據庫拜訪都是應用改接口,下降體系的龐雜性,增長了靈巧性。
假如我們要應用銜接池,也只需針對facade接口修正便可以。
由上圖可以看出,facade現實上是個理順體系間關系,下降體系間耦合度的一個經常使用的方法,或許你曾經不知不覺在應用,雖然不曉得它就是facade。