<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      適配器模式(Adapter Pattern)

        結(jié)構(gòu)型設(shè)計模式,見名知意,就是兩個不兼容的接口之間的橋梁。它結(jié)合了兩個獨立接口的功能。

        主要解決:常常要將一些"現(xiàn)存的對象"放到新的環(huán)境中,而新環(huán)境要求的接口是現(xiàn)對象不能滿足的。

        關(guān)鍵代碼:適配器繼承或依賴已有的對象,實現(xiàn)想要的目標(biāo)接口。

        優(yōu)點: 1、可以讓任何兩個沒有關(guān)聯(lián)的類一起運行。 2、提高了類的復(fù)用。 3、增加了類的透明度。 4、靈活性好。

        缺點: 1、過多地使用適配器,會讓系統(tǒng)非常零亂,不易整體進(jìn)行把握。 2.由于 JAVA 至多繼承一個類,所以至多只能適配一個適配者類,而且目標(biāo)類必須是抽象類。

        組成:

          1.目標(biāo)(target)標(biāo)準(zhǔn)接口
          2.源頭(source)不兼容對象
          3.適配器 (adapter)轉(zhuǎn)換不兼容對象為標(biāo)準(zhǔn)接口

        注意事項:適配器不是在詳細(xì)設(shè)計時添加的,而是解決正在服役的項目的問題。

      ======================================================== 以上八股文 來源  菜鳥================================================================================================

      舉個小例子:

        某個程序,最初設(shè)計是mysql 數(shù)據(jù)庫, 分頁的 關(guān)鍵字是 limit, 程序被賣了兩家公司,一家公司是 db2數(shù)據(jù)庫, 一家公司是 Oracle數(shù)據(jù)庫 , 程序的sql 語句 需要兼容 兩家數(shù)據(jù)庫的  分頁 關(guān)鍵字,且不能丟掉原有的, 這個時候就可以使用適配器模式, 適配其他兩種數(shù)據(jù)庫的關(guān)鍵字 。

      代碼如下:

         

      /**
       * 基礎(chǔ)分頁接口
       */
      public interface BasePage {
          public void page(String urlType,String sql);
      
      }
      
      /**
       * 其他分頁接口(Oracle,DB2)
       */
      public interface OtherPage {
          void oraclePage(String sql);
          void db2Page(String sql);
      }
      
      /**
       * Oracle 的實現(xiàn)
       */
      public class OraclePage implements OtherPage{
          @Override
          public void oraclePage(String sql) {
              String oracleSql = sql.replace("limit","ROW_NUMBER");
              System.out.println("oracle: " + oracleSql);
          }
          @Override
          public void db2Page(String sql) {}
      }
      
      /**
       * db2 的實現(xiàn)
       */
      public class DB2Page implements OtherPage{
          @Override
          public void oraclePage(String sql) {}
      
          @Override
          public void db2Page(String sql) {
              String db2Sql  = sql.replace("limit","RowNumber");//為了區(qū)分Oracle的ROW_NUMBER 改為駝峰式
              System.out.println("DB2 : " + db2Sql);
          }
      }
      
      /**
       * 適配器
       */
      public class PageAdapter implements BasePage{
          OtherPage otherPage;
          @Override
          public void page(String urlType, String sql) {
              if(urlType.contains("db2")){
                  otherPage = new DB2Page();
                  otherPage.db2Page(sql);
              }else if(urlType.contains("oracle")){
                  otherPage = new OraclePage();
                  otherPage.oraclePage(sql);
              }
          }
      }
      
      /**
       * 默認(rèn)查詢分頁類
       */
      public class SelectPage implements BasePage {
          PageAdapter pageAdapter;
          @Override
          public void page(String urlType, String sql) {
              if (urlType.contains("mysql")) {
                  System.out.println("mysql : " + sql);
              } else if (urlType.contains("db2") || urlType.contains("oracle")) {
                  pageAdapter = new PageAdapter();
                  pageAdapter.page(urlType, sql);
              } else {
                  System.err.println("不支持的數(shù)據(jù)庫" + urlType);
              }
          }
      }
      //測試執(zhí)行
          public static void main(String[] args) {
              String sql = " select * from xxxx  limit xx; ";
              SelectPage selectPage = new SelectPage();
              selectPage.page("jdbc:mysql://xxxxxxxxxxx",sql);
              selectPage.page("jdbc:db2://xxxxxxxxxxx",sql);
              selectPage.page("jdbc:oracle://xxxxxxxxxxx",sql);
              selectPage.page("jdbc:sqlserver://xxxxxxxxxxx",sql);
          }

      結(jié)果:

       ==========================================收工=================================================================================

      補充一個 代碼, 特定業(yè)務(wù)場景會用到, 需要琢磨一下,Abstract類寫固定代碼, 各個子類 寫 特殊代碼

      /**
       * 基礎(chǔ)分頁接口
       */
      public interface BasePage {
          public void page(String urlType,String sql);
      
      }
      
      /**
       * 其他分頁接口(Oracle,DB2)
       */
      public interface OtherPage {
          void oraclePage(String sql);
          void db2Page(String sql);
      }
      
      /**
       * 抽象類
       */
      public abstract class AbstractOtherPageClass implements OtherPage {
          @Override
          public void oraclePage(String sql) {
              String oracleSql = sql.replace("limit","ROW_NUMBER");
              System.out.println("oracle: " + oracleSql);
          }
          @Override
          public void db2Page(String sql) {
              String db2Sql  = sql.replace("limit","RowNumber");//為了區(qū)分Oracle的ROW_NUMBER 改為駝峰式
              System.out.println("DB2 : " + db2Sql);
          }
      }
      
      /**
       * OraclePage 繼承抽象類,不需要實現(xiàn)所有接口
       */
      public class OraclePage extends AbstractOtherPageClass{
          @Override
          public void oraclePage(String sql) {
              super.oraclePage(sql);
              //子類特有方法
          }
      }
      
      /**
       * db2 繼承抽象類,不需要實現(xiàn)所有接口
       */
      public class DB2Page extends AbstractOtherPageClass{
          @Override
          public void db2Page(String sql) {
              super.db2Page(sql);
              //子類特有方法
          }
      }
      
      /**
       * 適配器 繼承 抽象類,實現(xiàn) 基類。也可以new 子類對象
       */
      public class PageAdapter extends AbstractOtherPageClass implements BasePage {
      
      //    OtherPage otherPage;
      
          @Override
          public void page(String urlType, String sql) {
              if(urlType.contains("db2")){
                  super.db2Page(sql);
      //            otherPage = new DB2Page();
      //            otherPage.db2Page(sql);
              }else if(urlType.contains("oracle")){
                  super.oraclePage(sql);
      //            otherPage = new OraclePage();
      //            otherPage.oraclePage(sql);
              }
          }
      }
      
      /**
       * 默認(rèn)查詢分頁類
       */
      public class SelectPage implements BasePage {
          PageAdapter pageAdapter;
          @Override
          public void page(String urlType, String sql) {
              if (urlType.contains("mysql")) {
                  System.out.println("mysql : " + sql);
              } else if (urlType.contains("db2") || urlType.contains("oracle")) {
                  pageAdapter = new PageAdapter();
                  pageAdapter.page(urlType, sql);
              } else {
                  System.err.println("不支持的數(shù)據(jù)庫" + urlType);
              }
          }
      }
      
      //測試main方法
          public static void main(String[] args) {
              String sql = " select * from xxxx  limit xx; ";
              SelectPage selectPage = new SelectPage();
              selectPage.page("jdbc:mysql://xxxxxxxxxxx",sql);
              selectPage.page("jdbc:db2://xxxxxxxxxxx",sql);
              selectPage.page("jdbc:oracle://xxxxxxxxxxx",sql);
              selectPage.page("jdbc:sqlserver://xxxxxxxxxxx",sql);
          }
      

        補充一張圖

       

        

       

      posted on 2024-04-16 01:03  zy平平仄仄  閱讀(427)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 西西人体44WWW高清大胆| 欧美日激情日韩精品嗯| 黑巨人与欧美精品一区| 欧美成人精品三级在线观看 | 亚洲三级香港三级久久| 四虎永久免费很黄的视频| 久久精品一偷一偷国产| 男人一天堂精品国产乱码| 日韩中文字幕人妻一区| 国产欧美日韩亚洲一区二区三区| 99精品国产一区二区三区| 亚洲国产日韩一区三区| 遂川县| 日韩精品av一区二区三区| 色呦呦 国产精品| 精品国产一区二区三区香蕉| 亚洲在线一区二区三区四区| 1精品啪国产在线观看免费牛牛| 九九视频热最新在线视频| 国产一区二区三区乱码在线观看 | 麻豆亚洲精品一区二区| 国产乱码精品一区二三区| 亚洲精品动漫一区二区三| 久热这里只有精品12| 漂亮人妻被强中文字幕久久| 午夜在线不卡| 日韩精品一区二区午夜成人版 | 蜜芽亚洲AV无码精品国产午夜 | 国产乱妇无码大片在线观看| 国产精品麻豆欧美日韩ww | 日韩欧美人妻一区二区三区| 久久夜色精品国产亚av| 国产中文三级全黄| 国产精品无码制服丝袜| 日韩欧美一中文字暮专区| 久久久无码精品亚洲日韩蜜臀浪潮| 国产成人精品高清不卡在线| 国产精品一区二区三区黄| 国产尤物精品自在拍视频首页 | 精品国产伦理国产无遮挡| 欧美牲交a欧美牲交aⅴ图片|