面向介面程式設計在工廠模式下的實現

2021-04-07 02:40:26 字數 1242 閱讀 8667

去年「物件導向程式設計」課程的最後一道大題是用「類工廠」模式實現乙個資料庫元件。「類工廠」的類裡對於不同資料庫型別的處理是用switch...case語句來實現的,但這不符合物件導向的設計原則。如:工廠裡只判斷了兩種資料庫型別,如果再增加乙個資料庫型別勢必要改寫「類工廠」的**(即,再加一條case語句)。問題是:如何利用合理的設計方法改善這種弊端。

今天有研一的同事問起我,正好我對這個也是雲裡霧裡。順便問了一下高手,具體實現了出來。與大家共勉。

大的方向是利用「面向介面程式設計」的理論來實現。

首先,定義乙個介面,介面裡寫了一些抽象的方法。如:得到資料庫連線,根據sql語句得到結果集。

第二,定義不同資料庫型別對介面中的抽象方法的具體實現的類。如:oracleaccess,sqlaccess。這些類中一定包含與上面介面中的抽象方法具有相同簽名的方法。方法中有具體實現功能**。

第三,定義「類工廠」,「類工廠」中的構造方法需要有乙個入參,即,資料庫型別(dbtype)。還要有乙個得到具體類的例項的方法。

第四,如果你不嫌麻煩,還可以寫乙個讀取配置檔案的類。當然不寫也可以。

第五,編輯乙個配置檔案,我這裡用的是.properties檔案。檔案中就是key和value對應的關係。如:oracle=oracleaccess。其中,value就是要返回的例項的類名稱。

好了,現在看看各類的具體**。這裡為了方便起見,我用的返回不同字串的方法。沒有用資料庫的操作。

1、介面:

public inte***ce idbaccess

2、實現介面的具體類:

public class oracleaccess implements idbaccess

public string getstring()}

public class sqlaccess implements idbaccess

public string getstring()}

3、類工廠

public class dbfactory

public idbaccess getinstance() throws exception}

4、配置檔案的編輯

oracle=oracleaccess

sql=sqlaccess

5、現在可以寫乙個測試程式了,看看能不能執行。

public class test }

看看能不能輸出sql instance這個字串,把工廠的入參該成oracle試試。能不能輸出oracle instance這個字串。

面向介面程式設計 工廠模式 單例模式

當與資料庫打交道,考慮到有各種各樣的資料庫,我們通常設計乙個dao介面與n個dao類,dao類實現dao介面,在處理類中定義乙個dao介面,並在配置檔案中設定這個介面使用的是哪個dao類。此種方法也叫控制反轉。當有好多介面時如userdao,categorydao,productdao時,我們通常設...

面向介面程式設計 工廠模式 單例模式

當與資料庫打交道,考慮到有各種各樣的資料庫,我們通常設計乙個dao介面與n個dao類,dao類實現dao介面,在處理類中定義乙個dao介面,並在配置檔案中設定這個介面使用的是哪個dao類。此種方法也叫控制反轉。當有好多介面時如userdao,categorydao,productdao時,我們通常設...

面向介面程式設計模式

首先我申明這個詞沒有官方論證,只是我個人的乙個命名。到現在是不是有點納悶,有物件導向程式設計,面向介面程式設計,面向方面程式設計,怎麼又忽然多了乙個面向介面程式設計,不用著急聽我慢慢道來。叫 做開發模式好像不確定,實際上主要的目的就是更快更準的了解使用者需求,讓需求更改機率盡量降低,提高開發效率。我...