程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> JAVA編程入門知識 >> 從重構的角度學習bridge設計模式

從重構的角度學習bridge設計模式

編輯:JAVA編程入門知識
  從重構的角度學習bridge設計模式

  Bridge模式是一個在實際系統中經常應用的模式。它最能體現設計模式的原則針對接口進行編程,和使用聚合不使用繼續這兩個原則。

<!-- frame contents --> <!-- /frame contents -->

  由於我們過分的使用繼續,使類的結構過於復雜,不易理解,難以維護。非凡是在Java中由於不能同時繼續多個類,這樣就會造成多層繼續,維護更難。
  
  Bridge模式是解決多層繼續的根本原因。假如你在實現應用中一個類,需要繼續兩個以上的類,並且這兩者之間又持有某種關系,它們兩個都會有多種變化。
  
  Bridge模式是把這兩個類,分解為一個抽象,一個實現,使它們兩個分離,這樣兩種類可以獨立的變化。
  
  抽象就是,把一個實體的共同概念(相同的步驟),抽取出來(分解出幾個相互獨立的步驟),作為一個過程。如我們把數據庫的 操作抽象為一個過程,有幾個步驟,創建SQL語句,發送到數據庫處理,取得結果。

  實現就是怎樣完成這個抽象步驟,如發送到數據庫,需要結合具體的數據庫,考慮怎樣完成這個步驟等。並且同一步驟可能存在不同的實現,如對不同的數據庫需要不同的實現。

  現在我們假設一個情況,也是WEB中經常碰到的,在一個page有輸入框,如客戶信息的姓名,地址等,輸入信息後,然後按查找按鈕,把查找的結果顯示出來。
  
  我們現在假設查找客戶信息和帳戶信息,它們在不同的表中。
  
  但是我們的系統面對兩種人群,總部的它們信息保存到Oracle數據庫,但是各個分公司的數據保存在Sybase中,數據庫的位置等各不相同,這兩種的操作不同。

  下面是我們一般首先會使用的方式,使用if else進行,判定,這樣使用系統難以維護,難以擴展,不妨你增加一種查詢,或者一種數據庫試試?
  

  public class SearchAction(){
  public Vector searchData(string ActionType,String DBType){
  String SQL="";
  if(ActionType.equal("查找客戶信息")){
  //假如是查詢客戶信息,拼SQL語句從客戶表中讀取數據
  SQL="select * from Customer "

  if(dbType.equal("oracle")){
  //從總部數據庫讀取,數據庫為Oracle
  String connect_string ="jdbc:oracle:thin:hr/hr@localhost:1521:HRDB";
  DriverManager.registerDriver (new oracle.jdbc.OracleDriver());
  Connection conn = DriverManager.getConnection (connect_string);
  // Create a statement
  Statement stmt = conn.createStatement ();
  ResultSet rset = stmt.executeQuery (SQL);
  //以下省略部分動態從數據庫中取出數據,組裝成Vector,返回
  ..................................
  ...................................
  }else(dbType.equal("sybase")){
  //從分公司數據庫讀取,數據庫為Sybase
  String connect_string ="jdbc:sybase:Tds:cai/[email protected]:1521:FIN";
  DriverManager.registerDriver (new com.sybase.jdbc.SybDriver());
  Connection conn = DriverManager.getConnection (connect_string);
  // Create a statement
  Statement stmt = conn.createStatement ();
  ResultSet rset = stmt.executeQuery (SQL);
  //以下省略部分動態從數據庫中取出數據,組裝成Vector,返回
  ..................................
  ...................................

  }

  }else if(ActionType.equal("查找帳戶信息")){
  //假如是查詢帳戶信息,拼接SQL語句從帳戶表中讀取數據
  SQL="select * from Account "
  if(dbType.equal("oracle")){
  ..........................
  ..........................
  (作者注:此處省略從oracle讀取,約300字)

  
 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved