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