乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      設(shè)計模式——適配器模式

       印度阿三17 2018-12-14

      本文簡述適配器模式,考慮到j(luò)ava中沒有多繼承就只寫了對象適配器模式,然后例子是怎么用轉(zhuǎn)接口把3.5mm耳機插在小米8上面。

      image-20181214211029904

      一、概念

      適配器模式(英語:adapter pattern)有時候也稱包裝樣式或者包裝(wrapper)。將一個類的接口轉(zhuǎn)接成用戶所期待的。一個適配器使得因接口不兼容而不能在一起工作的類能在一起工作,做法是將類自己的接口包裹在一個已存在的類中。

      適配器模式允許一個已存在的類的接口被用作另一個接口。通??梢栽诓恍枰薷脑创a的情況下使用已存在的類。

      其實在生活中,適配器隨處看見,例如下圖,一個type-c轉(zhuǎn)耳機口的適配器。接下來讓我看看適配器模式的結(jié)構(gòu),并用java代碼來實現(xiàn)一個type-c接口的手機與3.5mm的耳機通過適配器連接。

      image-20181214184815532

      適配器模式主要解決兩個問題
      1.轉(zhuǎn)換當前接口為客戶端需要的接口
      2.通過適配器使用沒有我們需要的接口的類

      描述看似相同,實際上出發(fā)點不同~嘿嘿,意會意會

      二、結(jié)構(gòu)

      適配器模式有兩種,一種是類適配器,不過需要支持多繼承的語言才能實現(xiàn),本文主要講解單繼承也可以實現(xiàn)的對象適配器。下圖是對象適配器模式的類圖,Client需要一個實現(xiàn)Target接口的類來完成工作,而當前我們提供的只有Adaptee類,這時該怎么辦呢?恩,我們就造一個適配器(adapter)來完成這個需求。

      image-20181214075257986

      涉及到的主要角色:

      ? Target:目標接口,也就是我們期待得到的接口。

      ? Adaptee:當前擁有的接口,需要適配,已滿足客戶端的要求。

      ? Adapter:適配器類,適配器模式的核心,就是將Adaptee轉(zhuǎn)換成需要的接口的具體類。

      三、Type-C轉(zhuǎn)3.5mm耳機孔適配器

      這個是小米8手機類,只提供插TypeC耳機的接口

      public class Mi8{
          private TypeCEraPhones eraPhones;
          //打電話功能
          public void call() {
              System.out.println("打電話");
          }
          //播放音樂,有耳機就用耳機,沒耳機就外放
          public void playMusic() {
              if (eraPhones != null){
                  eraPhones.play();
              }else{
                  System.out.println("外放");
              }
      
          }
          // 插個TypeC接口的耳機
          public void setEraPhones(TypeCEraPhones eraPhones) {
              this.eraPhones = eraPhones;
          }
      }

      這個是TypeC接口的耳機接口,聽說用這個接口的耳機都好好貴呢~~

      public interface TypeCEraPhones {
          void play();
      }

      這個是我們以前剩下的能聽個響的3.5mm接口的耳機

      public class Mi35MMEraPhones {
          public void play(){
              System.out.println("使用3.5mm孔的小米耳機播放聲音");
          }
      }

      怎么辦呢,是花大錢買個新的耳機(想想,如果真是個復(fù)雜的對象,重新實現(xiàn)功能是不是很頭大),還是對當前這個3.5mm的耳機爆改,可是我還有個需要使用3.5mm的mp3 ,??,這可怎么是好……于是機智的我去淘寶發(fā)現(xiàn)了一個type-c轉(zhuǎn)3.5mm的接口,才5塊錢??!??

      適配器類

      public class Adapter implements TypeCEraPhones {
          private Mi35MMEraPhones eraPhones;
      
          public Adapter(Mi35MMEraPhones eraPhones) {
              this.eraPhones = eraPhones;
          }
      
          @Override
          public void play() {
              eraPhones.play();
          }
      }

      適配器實現(xiàn)了TypeC耳機的接口,并能把原來的耳機傳進來,于是我們就能愉快的用原來的耳機在小米8上聽音樂了,hooooooo~而且還能我的mp3使用,美滋滋~

      四、缺省適配器模式

      在很多情況下,必須讓一個具體類實現(xiàn)某一個接口,但是這個類又用不到接口所規(guī)定的所有的方法。通常的處理方法是,把方法都實現(xiàn)了,有用的寫上需要的方法,沒用的提供空實現(xiàn),煩死了??

      這些空的方法是一種浪費,有時也是一種混亂。只有看過這些空方法的代碼,程序員才能知道哪些是空的,哪些不是空的,于是我們可以提供一個適配器類,來為接口所有方法提供空實現(xiàn),然后這個具體類繼承適配器接口,需要哪些方法,進行重寫就可以。

      在jdk中有AbstractList這樣一個抽象類,實現(xiàn)了List接口,如果我們需要定制自己的集合類,就可以繼承這個抽象類,需要哪些方法就可以對這些方法進行重寫,而不用對List接口下所有方法都提供空實現(xiàn)。

      缺省適配器模式是一種特殊的適配器模式,目的是在不得不繼承某個方法時可以減少重寫不需要的方法。

      五、優(yōu)缺點

      優(yōu)點

      • 更好的復(fù)用性:系統(tǒng)需要使用現(xiàn)有的類,而此類的接口不符合系統(tǒng)的需要。那么通過適配器模式就可以讓這些功能得到更好的復(fù)用。
      • 更好的擴展性:在實現(xiàn)適配器功能的時候,可以調(diào)用自己開發(fā)的功能,從而自然地擴展系統(tǒng)的功能。

      缺點

      • 過多的使用適配器模式,會讓系統(tǒng)難以把控,畢竟表面上是A接口,其實內(nèi)部被適配成了B接口的實現(xiàn),一個系統(tǒng)如果太多出現(xiàn)這種情況,無異于一場災(zāi)難。

      六、總結(jié)

      本文對適配器模式進行了簡要介紹,主要把握是適配器實現(xiàn)需要的接口,并與adaptee進行組合,就可以實現(xiàn)對象適配器。在學習適配器模式過程中可以與裝飾者模式和外觀模式,適配器和裝飾者使用方法類似,但是目的完全不同,前者是將一個接口轉(zhuǎn)為另一個接,后者是為了對類進行增強;外觀模式目的是對外提供一個簡單的接口。

        本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
        轉(zhuǎn)藏 分享 獻花(0

        0條評論

        發(fā)表

        請遵守用戶 評論公約

        類似文章 更多