接口 Interface
                 沒(méi)有方法體,只有抽象方法, implements接口時(shí)候必須實(shí)現(xiàn)該接口所定義的所有的抽象方法
                 可以implements多個(gè)接口 用,號(hào)間隔.
          抽象類(lèi)  Abstract
                 可以有一部份實(shí)現(xiàn)方法,也可以有抽象方法,
                 只可以extends一個(gè)抽象類(lèi)

          二者都是不可實(shí)例化


          假設(shè)我們需要做一個(gè)支持多種數(shù)據(jù)庫(kù)的項(xiàng)目,但是數(shù)據(jù)庫(kù)之間有存在的差別,難道我們就要為不同的數(shù)據(jù)庫(kù)開(kāi)發(fā)不同的系統(tǒng)?答案是NO!
          我們可以將多種數(shù)據(jù)庫(kù)所有的方法抽象出來(lái),寫(xiě)成一個(gè)個(gè)的方法組合到一個(gè)接口中
          然后有多少種數(shù)據(jù)庫(kù)我們就寫(xiě)幾個(gè)這樣的類(lèi)實(shí)現(xiàn)這個(gè)接口

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

          定義完接口 我們?cè)賱?chuàng)建一個(gè)抽象類(lèi) 來(lái)實(shí)現(xiàn)公共的方法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;
               }
               /**
               *公共方法的實(shí)現(xiàn)
               **/

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

          接下來(lái)我們分別寫(xiě)3個(gè)類(lèi)OracleDataOperate,SqlServerDataOperate,MySqlDataOperate繼承AbstractDatOperate具體實(shí)現(xiàn)方法 這里不再敘述

          好了 現(xiàn)在最后一步 寫(xiě)一個(gè)工廠(chǎng)方法來(lái)統(tǒng)一得到數(shù)據(jù)庫(kù)操作類(lèi)的實(shí)例
          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 到此所有工作都完成 來(lái)測(cè)試吧
          public class  MyTest{
            public static void main(String args[]){
                
                DataOperate db=AbstrctDataOperate.getInstance();
                db.createConn();

             }
          }


          在MyTest類(lèi)里根本沒(méi)有出現(xiàn)OracelDataOperate、MysqlDataOperate等的影子,這就是接口的威力。客戶(hù)端不必針對(duì)OracelDataOperate等寫(xiě)不同的代碼,它只關(guān)心DataOperate即可,具體要取那個(gè)類(lèi)的邏輯就由DataOperateFactory負(fù)責(zé)了。
          如果還有新的數(shù)據(jù)庫(kù)添加的話(huà) 只需要象OracleaDataOperate那樣 再寫(xiě)一個(gè)這樣類(lèi) 繼承AbstractDataOperate類(lèi) 然后在工廠(chǎng)類(lèi)里DataOperateFactory加上相應(yīng)的代碼即可


          只有注冊(cè)用戶(hù)登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           

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

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

          主站蜘蛛池模板: 垦利县| 昌乐县| 贵阳市| 泾源县| 吉林省| 萨迦县| 黄冈市| 和林格尔县| 靖边县| 越西县| 蒙自县| 米林县| 临朐县| 章丘市| 申扎县| 陆良县| 六盘水市| 晋宁县| 沂源县| 松原市| 屯留县| 贡嘎县| 宁乡县| 广昌县| 新晃| 伊川县| 平谷区| 宁远县| 平顺县| 鹤峰县| 新营市| 玉屏| 屏东市| 绥德县| 枝江市| 综艺| 佳木斯市| 沙湾县| 兴和县| 南康市| 平顶山市|