泛型也可以應用於接口。例如在google爲了解決UI與業務邏輯之間的偶合關係,將UI與業務邏輯進行解耦使用了MVP框架,M即數據層,V即視圖層,P即邏輯處理層,在android開發初期朋友大家都知道UI邏輯都放在Activity或者Fragment中,爲了實現Activity/Fragment只有UI層邏輯,而業務邏輯放入其它庫中,我們嚴格按照MVP模式進行操作即可實現UI與業務邏輯分離。
接下來我們使用MVP模式來講解泛型接口
Present(P)層
public class PresenterImpl<T extends IPageView> implements IPresenter {
protected T t;
private boolean isDestroy = false;
public boolean isDestroy() {
return isDestroy;
}
public PresenterImpl(T t) {
super();
this.t = t;
}
public T getPageView() {
return t;
}
@Override
public void onStart() {
}
@Override
public void onResume() {
}
@Override
public void onPause() {
}
@Override
public void onStop() {
}
@Override
public void onDestroyView() {
isDestroy = true;
}
@Override
public void onDestroy() {
isDestroy = true;
}
@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
}
@Override
public void onLowMemory() {
}
@Override
public void onSaveInstanceState(Bundle outState) {
}
@Override
public void onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
}
@Override
public void onAttach(Context context) {
}
@Override
public void onAttach(Activity activity) {
}
@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
}
@Override
public void onDetach() {
}
}
View(V)層,提供View層的所有接口
public interface IPageView{
//獲取View層的Arguments
Bundle getArguments();
//獲取View層的Activity
FragmentActivity getActivity();
TitleBar getTitleBar();
}
使用上面的Present與PageView的設計模式,我們只要在Activity/Fragment中繼承IPageView同時在Activity/Fragment中包含Present實例即可如下所示
public class HomeActivity implements IPageView{
PresenterImpl mPresenterImpl;
onCreate(…){
mPresenterImpl=new PresenterImpl(this);
}
}
Bundle getArguments(){
return this.getArguments();
}
//獲取View層的Activity
FragmentActivity getActivity(){
return this;
}
TitleBar getTitleBar(){
return mTitleBar;
}
}
繼承接口IPageView,是爲了將Activity/Fragment中的所有對外公開的View提供統一的接口方便業務邏輯使用,同時在Activity/Fragment中包含mPresenterImpl對象,mPresenterImpl便是業務邏輯實現類,通過mPresenterImpl將View與與業務邏輯進行緊密關聯,關聯的View通過泛型方式傳遞,表示mPresenterImpl只處理指定的PageView.而泛型被指向繼承IPageView,所以在實現可以爲每個Present提供自己的PageView(即繼承IPageView的類。這樣就實現了接口泛型。