1. 程式人生 > >一個體現Java介面及工廠模式優點的例子

一個體現Java介面及工廠模式優點的例子

本例子以操作不同型別的資料庫為例:

簡要說明:
  • OracleDataOperate、SqlserverDataOperate、MysqlDataOperate,分別代表Oracle、Sqlserver、Mysql這三種資料庫的操作類。繼承自AbstractDataOperate
  • AbstractDataOperate是一個抽象類,包含了那些不同種類資料庫都是一樣程式碼的操作方法。繼承自DataOperate
  • DataOperate是上面說的資料操作類的統一介面,只有兩個方法:取得一條記錄、插入一條記錄。
  • DataOperateFactory是一個工廠方法,統一用它的方法來得到資料庫操作類的例項。
  • SampleClass是我們系統的某個功能模組的類。
  • People是一個實體類,代表一條記錄。三個欄位 oid唯一識別符號、name姓名、date生日。
詳細說明: 1、所有系統功能模組類只認DataOperat這個介面而不必管具體的實現類是OracleDataOperate還SqlserverDataOperate。DataOperate原始碼如下:
2、AbstractDataOperate、OracleDataOperate、SqlserverDataOperate、MysqlDataOperate都是繼承DataOperate介面的,沒什麼好說的,省略。 3、DataOperateFactory。我們看看工廠方法怎麼寫的。
4、接下來就看看使用端是如何呼叫工廠方法和使用資料操作類的。 我們發現SampleClass中根本沒有出現OracelDataOperate、 MysqlDataOperate等的影子,這就是介面的威力。客戶端不必針對OracelDataOperate等寫不同的程式碼,它只關心 DataOperate即可,具體要取那個類的邏輯就由DataOperateFactory負責了。 總結:
  • 從例子中我們可以看到什麼是面向介面的程式設計方式。SampleClass使用資料操作類可以不必關心具體是那個類,只要是符合介面的都行
  • 要例項?只須呼叫DataOperateFactory.getInstance()即可,其它的交於DataOperateFactory這個工廠來做吧,使用端什麼都不用關心。
  • 我們要支援新的資料庫型別,只須要象OracelDataOperate那樣,再寫一個繼承AbstractDataOperate的類即可,比如SysbaseDataOperate。然後到DataOperateFactory中加入相應程式碼即可。
  • 如果我們想要可配置性更高,可以用private static int dataType = MYSQL;中的值設定到一個文字檔案中。
  對於開發支援多種資料庫的系統,強烈建議使用hibernate,我現在做的系統就是用hibernate的,開發時用Mysql,到要給客戶時將資料庫換了DB2,程式不用做任何改動,真正的無逢移植。不過這樣,本文所提到的方法就沒什麼用了.