Facade 的定義 : 爲子系統中的一組介面提供一個一致的介面。
Facade 一個典型應用就是資料庫 JDBC 的應用 , 如下例對資料庫的操作 :
public class DBCompare { Connection conn = null; |
上例是 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 。