編輯:關於android開發
適配器模式的定義:將一個類的接口,轉換成客戶期望的另一個接口。適配器讓原本接口不兼容的類可以合作無間。
適配器模式其實也可以叫做轉換器模式,由定義可知適配器其實就是包裝某些對象從而讓他們的幾口開起來不像自己而像是別的東西。舉一個簡單的例子 :
假設現在已有一個軟件系統,你希望它能和一個新的廠商類庫搭配使用,但是這個新廠商所設計出來的接口不同於舊廠商的接口,如下圖所示:
此時如果不想改變現有代碼解決這個問題,就可以重新寫一個類,這個類負責將新廠商接口轉接成你所期望的接口,這個類就是一個適配器:
這個適配器實現了你的類所期望的接口,而且這個適配器也能和廠商的接口溝通,這個適配器工作起來就如同一個中間人,它將客戶所發出的請求轉換成廠商類能理解的請求,這就是適配器模式。
再通過代碼的例子來詳細了解一下這個模式,現在有一個鴨子和火雞的接口聲明如下:
public interface Duck {
public void quack();
public void fly_long();
}
public interface Turkey {
public void gobble();
public void fly_short();
}
實現一個具體的鴨子和火雞類
public class MallardDuck implements Duck { @Override public void quack() { // TODO Auto-generated method stub System.out.println("Quack!"); } @Override public void fly_long() { // TODO Auto-generated method stub System.out.println("I'm flying!"); } }
public class WildTurkey implements Turkey { @Override public void gobble() { // TODO Auto-generated method stub System.out.println("Gobble!"); } @Override public void fly_short() { // TODO Auto-generated method stub System.out.println("I'm flying a short distance"); } }
現在假設你缺少鴨子對象,想用一些火雞對象來冒充,顯而易見因為火雞的接口不同,所以不能直接拿來用,所以寫個適配器類完成這個轉化過程:
public class TurkeyAdapter implements Duck { Turkey turkey; public TurkeyAdapter(Turkey turkey) { this.turkey = turkey; } @Override public void quack() { // TODO Auto-generated method stub turkey.gobble(); } @Override public void fly_long() { // TODO Auto-generated method stub for (int i = 0; i < 5; i++) {//變成能夠長距離飛行 turkey.fly_short(); } } }
測試一下:
public class DuckTestDriver { public static void main(String[] args) { // TODO Auto-generated method stub MallardDuck duck = new MallardDuck(); WildTurkey turkey = new WildTurkey(); Duck turkeyAdapter = new TurkeyAdapter(turkey); System.out.println("The Turkey says..."); turkey.gobble(); turkey.fly_short(); System.out.println("\nThe Duck says..."); testDuck(duck); System.out.println("\nThe TurkeyAdapter says..."); testDuck(turkeyAdapter);//這裡的鴨子其實是一個火雞冒充的 } static void testDuck(Duck duck) { duck.quack(); duck.fly_long(); } }
打印結果:
The Turkey says... Gobble! I'm flying a short distance The Duck says... Quack! I'm flying! The TurkeyAdapter says... Gobble! I'm flying a short distance I'm flying a short distance I'm flying a short distance I'm flying a short distance I'm flying a short distance
總之:
(1)當需要使用一個現有的類而其接口並不符合你的需要時,就使用適配器,適配器改變接口以符合客戶的期望。
(2)實現一個適配器可能需要一番功夫,也可能不費功夫,視目標接口的大小與復雜度而定(為什麼這麼說是因為適配器並不是只能包裝一個類盡管上邊的例子確實只包裝了一個火雞類,可以通過適配器來適配許多類來提供一個接口讓客戶編碼)。
Atitit.反編譯apk android源碼以及防止反編譯apk,atititapkAtitit.反編譯apk android源碼以及防止反編譯ap
Android項目實戰(二十九):酒店預定日期選擇,android酒店預定先看需求效果圖: 幾個需求點: 1、顯示
Android Studio項目提交到GitHub,androidgithub1. 現在並安裝Git for Windows; 2. 點擊File->Setting
Android 更改 Toast 的默認位置,androidtoastAndroid中Toast的默認位置在屏幕靠近底部的位置,這個默認位置有時候並不合適。比如頁面上內容