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(
<
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(
<
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
From:http://tw.wingwit.com/Article/program/Java/gj/201311/27411.html