接口 Interface
                 沒有方法體,只有抽象方法, implements接口時候必須實現該接口所定義的所有的抽象方法
                 可以implements多個接口 用,號間隔.
          抽象類  Abstract
                 可以有一部份實現方法,也可以有抽象方法,
                 只可以extends一個抽象類

          二者都是不可實例化


          假設我們需要做一個支持多種數據庫的項目,但是數據庫之間有存在的差別,難道我們就要為不同的數據庫開發不同的系統?答案是NO!
          我們可以將多種數據庫所有的方法抽象出來,寫成一個個的方法組合到一個接口中
          然后有多少種數據庫我們就寫幾個這樣的類實現這個接口

          具體如下:
          我們首先把所有的抽象方法組合到一個DataOperate的接口中
          public interface DataOperate{
                Connection createConn();     /*建立連接*/
                 void closeConn();               /*關閉連接*/
                 ResultSet getRs();              /*返回結果集*/
                 boolean   exec();               /*執行語句*/
                 boolean   isClose();         
          /*公共方法 查看連接狀態*/
          }

          定義完接口 我們再創建一個抽象類 來實現公共的方法isClose()
          public abstract class AbstractDataOperate implements DataOperate{
               public Connection createConn(){
                      return null;
               }
               public void closeConn(){
               }
               public ResultSet getRs(){
                      return null;
               }
               public boolean exec(){
                      return fasle;
               }
               /**
               *公共方法的實現
               **/

               public boolean isClose(){
                  if(conn!=null)
                       return false;
                  else
                      return true;
               }
             
          }

          接下來我們分別寫3個類OracleDataOperate,SqlServerDataOperate,MySqlDataOperate繼承AbstractDatOperate具體實現方法 這里不再敘述

          好了 現在最后一步 寫一個工廠方法來統一得到數據庫操作類的實例
          public class DataOperateFactory{
               public static final int OracleKey=1;
               public static final int SqlServerKey=2;   
               public static final int MySqlKey=3;
              
               public static int DbType =OracleKey;
               private static DataOperate db;
              
               public static DataOperate getInstance(){
                     if(db==null){
                             if(DbType==OracleKey)
                                  db=new OracleDataOperate();
                            else if(DbType==SqlServerKey)
                                  db=new SqlServerDataOperate();
                            else if(DbType==MySqlKey)
                                  db=new MySqlDataOperate();
                    }
                   return db;
               }
          }

          Ok 到此所有工作都完成 來測試吧
          public class  MyTest{
            public static void main(String args[]){
                
                DataOperate db=AbstrctDataOperate.getInstance();
                db.createConn();

             }
          }


          在MyTest類里根本沒有出現OracelDataOperate、MysqlDataOperate等的影子,這就是接口的威力。客戶端不必針對OracelDataOperate等寫不同的代碼,它只關心DataOperate即可,具體要取那個類的邏輯就由DataOperateFactory負責了。
          如果還有新的數據庫添加的話 只需要象OracleaDataOperate那樣 再寫一個這樣類 繼承AbstractDataOperate類 然后在工廠類里DataOperateFactory加上相應的代碼即可


          只有注冊用戶登錄后才能發表評論。


          網站導航:
           

          posts - 11, comments - 1, trackbacks - 0, articles - 0

          Copyright © 射手座的我 雙子座的她

          主站蜘蛛池模板: 厦门市| 丹东市| 齐齐哈尔市| 利川市| 蒙城县| 库尔勒市| 宜宾市| 苏尼特左旗| 东源县| 特克斯县| 永定县| 隆安县| 客服| 沙雅县| 吴忠市| 西林县| 年辖:市辖区| 锦州市| 板桥市| 萨迦县| 荆门市| 崇明县| 日土县| 邵阳县| 松阳县| 独山县| 邵东县| 门头沟区| 张家界市| 扎兰屯市| 渭南市| 宝应县| 南阳市| 安平县| 汤原县| 尚志市| 安陆市| 成武县| 华宁县| 翁源县| 清丰县|