Android
在Android上提到適配器模式就會想到最常用的ListView和BaseAdapter
在這個功能的使用中,類似於適配器模式的對象適配器
例如在ListView中想用一個getView()方法,但是不同的數據,不同的需求,會有不同的getView()結果,所以getView()不能寫死了,那么可能就想到了用適配器模式
所以ListView里面包含了一個ListAdapter的成員變量,實際上是ListView繼承了AbsListView,ListAdapter變量是在AbsListView中聲明的
然后BaseAdapter是實現了ListAdapter的,那么我們自定義的***Adapter繼承了BaseAdapter,其實也就相當於間接實現了ListAdapter,並且***Adapter會具體去實現getView()方法
那么ListView就可以通過調用setAdapter(ListAdapter adapter)方法,將***Adapter傳進去,從而實現了我們想要的結果
Java
適配器模式有兩種:
- 類適配器
- 對象適配器
場景:
假如A類想用M方法,X類有M方法,但是M方法的結果不一定完全符合A類的需求
那么X類就是寫死了,不好用,這樣設計不好
那就把X類換成一個接口,弄出一些B,C,D,E.....類中間類出來,讓他們都有一個方法來處理M方法的東西,再給A類用
類適配器:
設計一個接口I,讓他也有M方法
然后設計一個B類,寫好符合A類需求的specialM方法
然后讓A類繼承B類,並實現I接口的M方法
最后在A類的M方法中以super的方式調用B類的specialM方法
對象適配器:(更多是用對象適配器)
設計一個接口I,讓他也有M方法
然后設計一個B類,寫好符合A類需求的specialM方法
然后在A類中聲明一個B類變量,並且A類實現I接口,那么A類也就有了M方法
最后在A類的M方法中,如果需要,就可以選擇調用B類的specialM方法
或者設計一個B類,實現I接口的M方法
然后在A類中聲明一個I類變量,再直接調用I接口的M方法
在調用A類的M方法之前,通過例如setAdapter(I Adapter)這樣的方法,將B類設置成A類的成員變量
這樣就保證了A類和I接口不變,適配不同情況的時候,寫一個類似B類的中間類進行適配就可以了
總之,兩端不變,通過不同的選擇方式,選擇不同的中間類,也就是適配器模式了