將乙個類的介面變換成客戶端所期待的另一種介面,從而使原本因介面不匹配而無法在一起工作的兩個類能夠在一起工作。
角色說明:
首先來說下物件介面卡模式的實現方式,就以電壓轉換為例子。
現在我們需要定義乙個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
總的來說,使用物件介面卡比較好。當然具體問題具體分析。
說到介面卡,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要這麼設計呢,想想在乙個列表中,我們要展示的布局可能是簡單的,也可能是超複雜的,這個布局是未知的,是根據要展示的資料集來決定的;通過介面卡模式,就能夠把不同的東西都可以轉化成同樣的介面,系統處理起來就有套路了,同時也無需關心各種千變萬化的布局。
設計模式 結構型模式 介面卡模式
抽象成績操作類 目標介面 inte ce scoreoperation 快速排序類 適配者 class quicksort public void sort int array,int p,int r public intpartition int a,int p,int r swap a,j 1,...
設計模式 結構型模式 介面卡模式
已有介面a和b,在不修改a b的情況下,a要為b所用,這個時候需要乙個中間人來承擔將a的介面封裝成為b可以使用的介面,這裡的 中間人 就是介面卡 adapter 轉換介面 coyoteadapter將tomcat 的connector和container進行解耦,connector和containe...
結構型模式 介面卡模式
介面卡模式 將乙個類的介面變換成客戶端所期待的另一種介面,從而使原本因介面不匹配而無法在一起工作的兩個類能夠在一起工作。介面卡模式角色目標 targe 角色 該角色定義要轉換成的目標介面 源 adaptee 角色 需要被轉換成目標角色的源角色 介面卡 adapter 角色 該角色是介面卡模式的核心,...