熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> Java高級技術 >> 正文

設計模式之Facade(外觀)

2013-11-23 19:45:46  來源: Java高級技術 

  Facade的定義 為子系統中的一組接口提供一個一致的界面
  Facade一個典型應用就是數據庫JDBC的應用如下例對數據庫的操作
  public class DBCompare {
  Connection conn = null
  PreparedStatement prep = null
  ResultSet rset = null
  try {
  ClassforName( driver>newInstance()
  conn = DriverManagergetConnection( database>
   String sql = SELECT * FROM <table> WHERE <column name> = ?
     prep = connprepareStatement( sql )
  prepsetString( column value>
  rset = prepexecuteQuery()
  if( rsetnext() ) {      Systemoutprintln( rsetgetString( column name ) )
     }
  } catch( SException e ) {
  eprintStackTrace()
  } finally {
     rsetclose()
     prepclose()
     connclose()
  }
  } 
  上例是Jsp中最通常的對數據庫操作辦法
  在應用中經常需要對數據庫操作每次都寫上述一段代碼肯定比較麻煩需要將其中不變的部分提煉出來做成一個接口這就引入了facade外觀對象如果以後我們更換ClassforName中的<driver>也非常方便比如從Mysql數據庫換到Oracle數據庫只要更換facade接口中的driver就可以
  我們做成了一個Facade接口使用該接口上例中的程序就可以更改如下
  public class DBCompare {
  String sql = SELECT * FROM <table> WHERE <column name> = ?  
  try {
  Mysql msql=new mysql(sql)
   prepsetString( column value>
  rset = prepexecuteQuery()
     if( rsetnext() ) {   
   Systemoutprintln( rsetgetString( column name ) )
     }
  } catch( SException e ) {
  eprintStackTrace()
  } finally {
     mysqlclose()
     mysql=null
  }
  }
  可見非常簡單所有程序對數據庫訪問都是使用改接口降低系統的復雜性增加了靈活性
  如果我們要使用連接池也只要針對facade接口修改就可以
  
  由上圖可以看出facade實際上是個理順系統間關系降低系統間耦合度的一個常用的辦法也許你已經不知不覺在使用盡管不知道它就是facade

From:http://tw.wingwit.com/Article/program/Java/gj/201311/27411.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.