深入淺出泛型設計-基礎篇(二)

泛型也可以應用於接口。例如在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的類。這樣就實現了接口泛型。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章