国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 學(xué)院 > 開(kāi)發(fā)設(shè)計(jì) > 正文

從重構(gòu)的角度學(xué)習(xí)bridge設(shè)計(jì)模式

2019-11-17 06:20:52
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

  從重構(gòu)的角度學(xué)習(xí)bridge設(shè)計(jì)模式

  Bridge模式是一個(gè)在實(shí)際系統(tǒng)中經(jīng)常應(yīng)用的模式。它最能體現(xiàn)設(shè)計(jì)模式的原則針對(duì)接口進(jìn)行編程,和使用聚合不使用繼續(xù)這兩個(gè)原則。

  由于我們過(guò)分的使用繼續(xù),使類的結(jié)構(gòu)過(guò)于復(fù)雜,不易理解,難以維護(hù)。非凡是在java中由于不能同時(shí)繼續(xù)多個(gè)類,這樣就會(huì)造成多層繼續(xù),維護(hù)更難。

  Bridge模式是解決多層繼續(xù)的根本原因。假如你在實(shí)現(xiàn)應(yīng)用中一個(gè)類,需要繼續(xù)兩個(gè)以上的類,并且這兩者之間又持有某種關(guān)系,它們兩個(gè)都會(huì)有多種變化。

  Bridge模式是把這兩個(gè)類,分解為一個(gè)抽象,一個(gè)實(shí)現(xiàn),使它們兩個(gè)分離,這樣兩種類可以獨(dú)立的變化。

  抽象就是,把一個(gè)實(shí)體的共同概念(相同的步驟),抽取出來(lái)(分解出幾個(gè)相互獨(dú)立的步驟),作為一個(gè)過(guò)程。如我們把數(shù)據(jù)庫(kù)的 操作抽象為一個(gè)過(guò)程,有幾個(gè)步驟,創(chuàng)建SQL語(yǔ)句,發(fā)送到數(shù)據(jù)庫(kù)處理,取得結(jié)果。

  實(shí)現(xiàn)就是怎樣完成這個(gè)抽象步驟,如發(fā)送到數(shù)據(jù)庫(kù),需要結(jié)合具體的數(shù)據(jù)庫(kù),考慮怎樣完成這個(gè)步驟等。并且同一步驟可能存在不同的實(shí)現(xiàn),如對(duì)不同的數(shù)據(jù)庫(kù)需要不同的實(shí)現(xiàn)。

  現(xiàn)在我們假設(shè)一個(gè)情況,也是WEB中經(jīng)常碰到的,在一個(gè)page有輸入框,如客戶信息的姓名,地址等,輸入信息后,然后按查找按鈕,把查找的結(jié)果顯示出來(lái)。

  我們現(xiàn)在假設(shè)查找客戶信息和帳戶信息,它們?cè)诓煌谋碇小?br />
  但是我們的系統(tǒng)面對(duì)兩種人群,總部的它們信息保存到Oracle數(shù)據(jù)庫(kù),但是各個(gè)分公司的數(shù)據(jù)保存在Sybase中,數(shù)據(jù)庫(kù)的位置等各不相同,這兩種的操作不同。

  下面是我們一般首先會(huì)使用的方式,使用if else進(jìn)行,判定,這樣使用系統(tǒng)難以維護(hù),難以擴(kuò)展,不妨你增加一種查詢,或者一種數(shù)據(jù)庫(kù)試試?

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

if(dbType.equal("oracle")){
//從總部數(shù)據(jù)庫(kù)讀取,數(shù)據(jù)庫(kù)為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);
//以下省略部分動(dòng)態(tài)從數(shù)據(jù)庫(kù)中取出數(shù)據(jù),組裝成Vector,返回
..................................
...................................
}else(dbType.equal("sybase")){
//從分公司數(shù)據(jù)庫(kù)讀取,數(shù)據(jù)庫(kù)為Sybase
String connect_string ="jdbc:sybase:Tds:cai/cai@192.168.1.12: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);
//以下省略部分動(dòng)態(tài)從數(shù)據(jù)庫(kù)中取出數(shù)據(jù),組裝成Vector,返回
..................................
...................................

}

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



發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 农安县| 珲春市| 邛崃市| 阿瓦提县| 微博| 荆州市| 乌拉特后旗| 汨罗市| 噶尔县| 西贡区| 清苑县| 杭锦后旗| 青岛市| 绵阳市| 万州区| 陇南市| 行唐县| 温宿县| 呈贡县| 上饶县| 宕昌县| 鹤岗市| 安乡县| 鄂温| 京山县| 车致| 东乌珠穆沁旗| 淮南市| 安丘市| 大渡口区| 万年县| 通辽市| 海伦市| 保亭| 金秀| 丽水市| 澄迈县| 嘉义县| 驻马店市| 焉耆| 太仆寺旗|