設計模式——適配器模式

來源:互聯網
上載者:User

標籤:style   blog   http   color   io   os   使用   java   ar   

適配器模式定義:將一個類的介面,轉換成客戶期望的另一個介面。適配器讓原本介面不相容的類可以合作無間。 

  我們首先需要明白什麼是適配器,如是電源插座適配器。通過這一個適配器可以讓三孔插座“插到”二孔插座上。而在實際編碼中,如果兩個介面之間能搭配使用,第一種方法就是改變其中一方的源碼,但是很多時候這需要很大的工作量,這是我們可以在這兩個介面之間加一個適配器,這樣就可以相對來說用較少的人力、物力消耗來達到同樣的效果。

  舉個例子來說:在Java早期的集合類型中都實現了一個elements()方法,該方法會返回一個Enumeration類型,Enumeration介面中定義了兩個方法hasMoreElements()和nextElements(),用來對集合中的元素進行遍曆。而在Sum公司推出新的集合類之後,開始使用Iterator介面來對集合中的元素進行遍曆,如果某個方法只支援Iterator,不支援Enumeration,那麼就可以在這裡定義一個適配器,來進行中間轉換。

  具體代碼如下:

定義一個Enumeration2Iterator的類用來將Enumeration轉換成Iterator。
 1 /** 2  * Enumeration 到 Iterator的適配器 3  * @author Apache_xiaochao 4  * 5  * @param <E> 6  */ 7 public class Enumeration2Iterator<E> implements Iterator<E> { 8      9     private Enumeration<E> enumeration;10     11     public Enumeration2Iterator(Enumeration<E> enumeration) {12         super();13         this.enumeration = enumeration;14     }15 16     @Override17     public boolean hasNext() {18         return enumeration.hasMoreElements();19     }20 21     @Override22     public E next() {23         return enumeration.nextElement();24     }25 26     @Override27     public void remove() {28         //不支援此操作,所以用異常來通知使用者29         throw new UnsupportedOperationException();        30     }31 32 }

測試代碼如下:

 1 public class Driver { 2      3     /** 4      * 遍曆列印集合元素的方法 5      * @param iterator 6      */ 7     public<E> void iterate(Iterator<E> iterator){ 8         while(iterator.hasNext()){ 9             System.out.println(iterator.next());10         }11     }12 13     public static void main(String[] args) {14         15         Driver driver = new Driver();16         Vector<String> vector = new Vector<>();17         vector.add("a");18         vector.add("b");19         vector.add("c");20         //這裡我們假設Vector不支援iterators()方法21         //driver.iterate(vector.elements());  //因為iterate方法不支援Enumeration,只支援Iterator,所以這裡需要一個適配器進行轉換22         driver.iterate(new Enumeration2Iterator<>(vector.elements()));        23     }24 25 }
適配器模式有兩種:
  • “對象”適配器,上面講的就是這種適配器
  • “類”適配器,這個需要多重繼承才能實現,大致的實現是讓適配器去繼承被適配的類(比如上例的Iterator)和希望適配的類(比如上例中的Enumeration)
一個適配器可以同時適配多個介面,並不一定非得適配一個介面。當需要使用一個現有的類而其介面並不符合你的需求的時候,就使用適配器模式。裝飾者模式與適配器模式的區別:
  • 適配器是用來將一個介面轉換成另一個介面的中介軟體
  • 裝飾者模式是通過組合的思想來增強某一個對象的能力

設計模式——適配器模式

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.