深入浅出泛型设计-基础篇(二)

泛型也可以应用于接口。例如在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的类。这样就实现了接口泛型。

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