將乙個類的介面變換成客戶端所期待的另一種介面,從而使原本因介面不匹配而無法在一起工作的兩個類能夠在一起工作。
角色說明:
首先來說下物件介面卡模式的實現方式,就以電壓轉換為例子。
現在我們需要定義乙個220v轉換成5v的介面:
inte***ce adapter
被適配角色,一般是已存在的類,需要適配新的介面。生活中的220v電源無處不在:
public class electric
}
我們需要乙個具體介面卡,這個介面卡就是變壓器,能夠將220v轉為5v輸出:
public class phoneadapter implements adapter
@override
public int convert_5v()
}
public void test()
輸出結果:
預設電壓:220
介面卡開始工作:
輸入電壓:220
輸出電壓:5
適配轉換後的電壓:5
上面的例子就是物件介面卡模式,適配的源目標物件需要傳遞給介面卡。
類介面卡只要是通過繼承源目標類來實現
跟4.1一樣
inte***ce adapter
跟4.2一樣
public class electric
}
跟4.3有區別
public class phoneadapter extends electric implements adapter
}
跟4.4有區別
public void test()
輸出結果:
介面卡開始工作:
輸入電壓:220
輸出電壓:5
適配轉換後的電壓:5
類介面卡模式只要通過繼承源目標類來實現,無需持有源目標物件。
總的來說,使用物件介面卡比較好。當然具體問題具體分析。
過多的使用介面卡,會讓系統非常零亂,不易整體進行把握。明明呼叫a介面,卻被適配成b介面。
說到介面卡,listview
和recyclerview
就再熟悉不過了,listview
現在應該很少用了吧,這裡就以recyclerview
來分析。
先來乙個recyclerview
的簡單使用例子:
activity布局檔案 activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
item 布局檔案 item_rv.xml
<?xml version="1.0" encoding="utf-8"?>
activity**
public class mainactivity extends activity
private void initvar()
private void initview()
private arraylistgetdata()
return data;}}
adapter**
public class myadapter extends recyclerview.adapter
@override
//建立乙個我們自定義的viewholder
public viewholder oncreateviewholder(viewgroup parent, int viewtype)
@override
//繫結viewholder
public void onbindviewholder(viewholder holder, int position)
@override
//item數量
public int getitemcount()
public static class viewholder extends recyclerview.viewholder }}
從上面的例子可以看到,使用recyclerview時我們要傳遞乙個adapter進去,然後通過複寫adapter中的oncreateviewholder()、onbindviewholder()、getitemcount()等方法以及內部類viewholder。通過不同的adapter,我們能夠實現不同的布局。
上面的myadapter是繼承recyclerview.adapter這個類的,而adapter實際上是recyclerview的內部類。這裡的adapter就充當了介面卡介面,即目標角色,recyclerview內部通過adapter獲取它需要的介面和資料等。至於myadapter,就是具體的介面卡,通過它把不同的布局跟recyclerview聯絡起來。最後就是被適配角色,即源角色,這裡就是各種不同的item布局。
為什麼android要這麼設計呢,想想在乙個列表中,我們要展示的布局可能是簡單的,也可能是超複雜的,這個布局是未知的,是根據要展示的資料集來決定的;通過介面卡模式,就能夠把不同的東西都可以轉化成同樣的介面,系統處理起來就有套路了,同時也無需關心各種千變萬化的布局。
Android中的設計模式 介面卡模式
從名字上就可以看出介面卡是為了針對介面不匹配的情況,而做出的相容方法,假設我們有乙個已經存在的類adaptee,其中有一些已經存在並實現好的方法methoda。但是客戶不希望呼叫這個類,而是希望呼叫乙個特定的介面例如target介面。於是如果想要呼叫adaptee.methoda 方法,建立乙個ad...
徹底明白Android設計模式 介面卡模式
該模式是將兩個不相干的介面進行適配,從而在一起工作 比如這裡要定義乙個介面卡,用於hdmi介面轉vga介面,生活中比較常用是吧,直接上 定義hdmi介面 public inte ce hdmi 定義vga介面 public inte ce vga 定義vga轉hdmi介面 在vga的介面工作處呼叫h...
二十三種設計模式之介面卡模式
介面卡模式簡述 一類介面進行轉換成另一種介面,例如平時我們將三眼的插孔轉換成兩眼的轉換器 應用場景 火雞冒充鴨子 public inte ce duck public class greenheadduck implements duck override public void fly publi...