<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                ## **1. 基本介紹** >1.適配器模式(Adapter Pattern)將某個類的接口轉換成客戶端期望的另一個接口表示,主要的目的是兼容性,讓原本因接口不匹配不能一起工作的兩個類可以協同工作。其別名為包裝器(Wrapper); 2.適配器模式屬于結構型模式; 3.主要分為三類:類適配器模式,對象適配器模式,接口適配器模式。 ## **2. 工作原理** >1.適配器模式:將一個類的接口轉換成另一種接口,讓原本接口不兼容的類可以兼容; 2.從用戶的角度看不到被適配者,是解耦合的; 3.用戶調用適配器轉化出來的目標接口方法,適配器再調用被適配者的相關接口方法 4.用戶收到反饋結果,感覺只是和目標接口交互。 ![](https://img.kancloud.cn/03/60/03608274b1d2380bfe55d003af04d742_675x242.png) ## **3. 類適配器** #### 基本介紹 >Adapter類,通過繼承src類,實現dst類接口,完成src->dst的適配 #### 原理圖 >電腦3.0接口兼容鍵盤2.0接口 ![](https://img.kancloud.cn/4f/98/4f988d9733cee50ec8278753fd16c611_654x291.png) 代碼實現 `電腦類:` ``` /** * 電腦 */ public class Computer { /** * 電腦串口為3.0 * @return */ public boolean usb3(){ System.out.println("電腦的USB接口為3.0"); System.out.println("該電腦串口正常運行"); return true; } } ``` `轉換接口:` ``` /** * 兼容interface */ public interface Compatible { boolean usb2ExchangeUSB3(); } ``` `適配器類:` ``` /** * 適配器類 */ public class CompatibleAdapter extends Computer implements Compatible { /** * 3.0接口兼容2.0接口 */ @Override public boolean usb2ExchangeUSB3() { //獲取電腦的3.0接口 boolean value = super.usb3(); if (value){ //TODO 接口3.0兼容2.0接口 System.out.println("接口3.0兼容2.0接口"); return true; } return false; } } ``` `鍵盤接入類:` ``` /** * 鍵盤接入 */ public class Keyboard { /** * 鍵盤USB為2.0 * @return */ public boolean access(Compatible compatible){ if (compatible.usb2ExchangeUSB3()){ System.out.println("電腦,鍵盤正常運行"); return true; } return false; } } ``` `測試類:` ``` public class Client { public static void main(String[] args) { System.out.println("類適配器模式"); Keyboard keyboard = new Keyboard(); boolean value = keyboard.access(new CompatibleAdapter()); if (value){ System.out.println("正常3.0兼容2.0"); }else{ System.out.println("不兼容"); } } } ``` `執行結果:` ``` 對象適配器模式 電腦的USB接口為3.0 該電腦串口正常運行 接口3.0兼容2.0接口 電腦,鍵盤正常運行 正常3.0兼容2.0 ``` `注意事項` >1.Java是單繼承機制,所以類適配器需要繼承src類,這一點算是一個缺點,因為這要求dst必須是接口,有一定的局限性; 2.src類的方法在Adapter中都會暴露出來,也增加了使用的成本; 3.由于其繼承了src類,所以它可以根據需求重寫src類的方法,使得Adapter的靈活性增強了。 ## **4. 對象適配器** #### 基本介紹 >1.基本思路和類的適配器模式相同,只是將Adapter類作修改,不是繼承src類,而是持有src類的實例,以解決兼容性的問題。即:持有src類,實現dst類接口,完成src->dst的適配; 2.根據"合成復用原則",在系統中盡量使用關聯關系來替代繼承關系,因此大部分結構型模式都是對象結構型模式; 3.對象適配器模式是適配器模式常用的一種。 #### 原理圖 >電腦3.0接口兼容鍵盤2.0接口 ![](https://img.kancloud.cn/c3/7a/c37a2516a4d0686a5a02dfc5d39d04f8_672x271.png) 代碼實現 `電腦類:` ``` /** * 電腦 */ public class Computer { /** * 電腦串口為3.0 * @return */ public boolean usb3(){ System.out.println("電腦的USB接口為3.0"); System.out.println("該電腦串口正常運行"); return true; } } ``` `轉換接口:` ``` /** * 兼容interface */ public interface Compatible { boolean usb2ExchangeUSB3(); } ``` `適配器類:` ``` /** * 適配器類 */ public class CompatibleAdapter implements Compatible{ //使用聚合關系,符合合成復用原則 private Computer computer; //構造方法 public CompatibleAdapter(Computer computer){ this.computer = computer; } /** * 3.0接口兼容2.0接口 */ @Override public boolean usb2ExchangeUSB3() { //獲取電腦的3.0接口 boolean value = computer.usb3(); if (value){ //TODO 接口3.0兼容2.0接口 System.out.println("接口3.0兼容2.0接口"); return true; } return false; } } ``` `鍵盤類:` ``` /** * 鍵盤接入 */ public class Keyboard { /** * 鍵盤USB為2.0 * @return */ public boolean access(Compatible compatible){ if (compatible.usb2ExchangeUSB3()){ System.out.println("電腦,鍵盤正常運行"); return true; } return false; } } ``` `測試類:` ``` /** * 測試類 */ public class Client { public static void main(String[] args) { System.out.println("對象適配器模式"); Keyboard keyboard = new Keyboard(); boolean value = keyboard.access(new CompatibleAdapter(new Computer())); if (value){ System.out.println("正常3.0兼容2.0"); }else{ System.out.println("不兼容"); } } } ``` `執行結果:` ``` 對象適配器模式 電腦的USB接口為3.0 該電腦串口正常運行 接口3.0兼容2.0接口 電腦,鍵盤正常運行 正常3.0兼容2.0 ``` #### 注意事項 >1.對象適配器和類適配器其實算是同一種思想,只不過實現方式不同。根據合成復用原則,使用聚合替代繼承,所以它解決了類適配器必須繼承src的局限性問題,也不再要求dst必須是接口。 2.使用成本更低,更靈活。 ## **5. 接口適配器** #### 基本介紹 >1.當不需要 全部實現接口提供的方法時,設計一個抽象類實現接口,并為該接口中每個方法提供一個默認實現(空方法),那么該抽象類的子類可有選擇地覆蓋父類的某些方法來實現需求。 2.適用于一個接口不想使用其所有的方法的情況。 #### 原理圖 ![](https://img.kancloud.cn/29/b9/29b9cc16f92c935c9c30a283452a6462_667x335.png) 代碼實現 `電腦接口類:` ``` /** * 電腦接口 */ public interface ComputerInterface { //電源接口 void powerInterface(); //USB接口 void usbInterface(); //串行接口 void serialInterface(); //音頻接口 void audioInterface(); } ``` `電腦抽象類適配器類:` ``` /** * 電腦抽象類適配器 */ public abstract class ComputerAdapter implements ComputerInterface{ //需要重寫接口的全部方法,空實現(默認實現) @Override public void powerInterface() { } @Override public void usbInterface() { } @Override public void serialInterface() { } @Override public void audioInterface() { } } ``` `測試類:` ``` /** * 測試類 */ public class Client { public static void main(String[] args) { //匿名內部類 ComputerAdapter為抽象類 ComputerAdapter computerAdapter = new ComputerAdapter(){ //如果業務僅需要覆蓋powerInterface方法,不需要重寫其他方法 @Override public void powerInterface() { System.out.println("使用接口適配器模式,僅調用powerInterface方法"); } }; computerAdapter.powerInterface(); } } ``` `執行結果:` ``` 使用接口適配器模式,僅調用powerInterface方法 ```
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看