关于MVP模式的使用设计
来源:互联网 发布:mac版su破解教程 编辑:程序博客网 时间:2024/05/15 05:38
MVP设计模式对于Android开发已经越来越被人使用,M模型,V视图,P主持者,Presenter所扮演的角色就相当于连接M和V的桥梁。
P相当于JAVA设计模式中的一般的V是通过接口依赖注入,通过命令模式的方式进行,简单的理解命令模式就是使用接口的回调以达到对象方法的调用。命令模式在《JAVA设计模式》一书中解释为:涉及一个对象请求另一个对象调用其方法达到某种目的,但不希望或者无法含有被请求者的引用,即可使用命令模式。那么通过书中例子可以推断出这种调用模式就是利用接口回调。接口回调:实现某接口的类的引用赋给接口Variable,通过接口该变量调用所实现类的方法。Android中一些通信和View的事件响应也是回调接口的功劳。
故而Presenter中充当请求者,也就是回调的一般使用办法,将会包含一个接口的变量,一般通过依赖注入的方式将实现接口类引用赋值进来。而Presenter会在View中进行直接创建,它的使用维护都归此View管理。在Presenter中将会连接M层的逻辑处理。
但这样一般使用缺乏一些设计管理性。
那么下面给出一种对Presenter的管理设计方案:
首先定义一个需要被View实现的基础接口:
public interface MvpViewManager {// Object getChildMvpViewManager();}
然后定义一个Presenter需要实现的用来注入View更新的接口引用的接口:
package presenter;/** * Created by KUATANG on 2016/10/16. */public interface PresenterInterface<T extends MvpViewManager>{ void attachMvpViewManager(T mvpViewManager); void detachMvpViewManager(); void configurationParamter(Object mObject);}
定义一个Presenter的基类(抽象):
package presenter;/** * Created by KUATANG on 2016/10/16. */public abstract class Presenter<T extends MvpViewManager> implements PresenterInterface<T>{ private T mvpViewManager; private Object mObject; @Override public void attachMvpViewManager(T mvpViewManager) { this.mvpViewManager = mvpViewManager; } @Override public void detachMvpViewManager() { mvpViewManager = null; } @Override public void configurationParamter(Object mObject) { this.mObject = mObject; } protected T getInstanceMvpViewManager(){ return mvpViewManager; }}
接下来就是使用上述接口了——
定义一个具体的View的更新接口:
package interfaceview;import presenter.MvpViewManager;/** * Created by KUATANG on 2016/10/16. */public interface IFilePresenterView extends MvpViewManager{ void updateTipToast();}
注意:它继承自MvpViewManager接口。
查看它的实现:
package fragment;import android.os.Bundle;import android.support.v7.widget.RecyclerView;import application.FragmentBasic;import concretepresenter.FileListPresenter;import interfaceview.IFilePresenterView;/** * Created by KUATANG on 2016/10/16. */public class FileListFragment extends FragmentBasic implements IFilePresenterView{ private String paramArg0, paramArg1; private RecyclerView recyclerView; private FileListPresenter mFileListPresenter; public static FileListFragment newInstance(String paramArg0, int paramArg1){ FileListFragment fileListFragment = new FileListFragment(); Bundle mBundle = new Bundle(); mBundle.putString("paramArg0", paramArg0); mBundle.putInt("paramArg1", paramArg1); fileListFragment.setArguments(mBundle); return fileListFragment; } public FileListFragment(){ super(); mFileListPresenter = new FileListPresenter(); mFileListPresenter.attachMvpViewManager(this); } @Override public void updateTipToast() { } @Override public int getFragmentLayoutView() { return 0; } @Override protected void getArgumentsFromFragment() { super.getArgumentsFromFragment(); if (getArguments() != null){ Bundle _mBundle = getArguments(); String _string_param = _mBundle.getString("paramArg0"); int _int_param = _mBundle.getInt("paramArg1", 0); } } @Override protected void setInitMemberWidgets() { super.setInitMemberWidgets(); } @Override protected void setInitMemberDataVariable() { super.setInitMemberDataVariable(); } @Override protected void setInitOtherWorks() { super.setInitOtherWorks(); }}
FragmentBasic 作为Fragment的基类:
package application;import android.app.Activity;import android.content.Context;import android.content.res.Configuration;import android.os.Bundle;import android.support.v4.app.Fragment;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;/** * Created by KUATANG on 2016/10/16. */public abstract class FragmentBasic extends Fragment implements IFragmentPosrtable{ public Context context; protected View viewRoot; protected Boolean isShowFragment; public Activity activity; public FragmentBasic() { super(); // TODO Auto-generated constructor stub } public Boolean getIsShowFragment() { return isShowFragment; } public void setIsShowFragment(Boolean isShowFragment) { this.isShowFragment = isShowFragment; } public Context getContext() { return context; } public View getView() { return viewRoot; }// public void setView(View view) {// this.view = view;// } @Override public Context getActivityContext() { // TODO Auto-generated method stub context = getActivity(); activity = getActivity(); return context; } @Override public void onActivityCreated(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onActivityCreated(savedInstanceState); } @Override public void onAttach(Activity activity) { // TODO Auto-generated method stub super.onAttach(activity); } @Override public void onConfigurationChanged(Configuration newConfig) { // TODO Auto-generated method stub super.onConfigurationChanged(newConfig); } @Override public void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); } @Override public void onDestroy() { // TODO Auto-generated method stub super.onDestroy(); setIsShowFragment(false); } @Override public void onDestroyView() { // TODO Auto-generated method stub super.onDestroyView(); } @Override public void onDetach() { // TODO Auto-generated method stub super.onDetach(); } @Override public void onPause() { // TODO Auto-generated method stub super.onPause(); } @Override public void onResume() { // TODO Auto-generated method stub super.onResume(); setIsShowFragment(true); } @Override public void onSaveInstanceState(Bundle outState) { // TODO Auto-generated method stub super.onSaveInstanceState(outState); } @Override public void onStart() { // TODO Auto-generated method stub super.onStart(); } @Override public void onStop() { // TODO Auto-generated method stub super.onStop(); } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // TODO Auto-generated method stub getArgumentsFromFragment(); viewRoot = inflater.inflate(getFragmentLayoutView(), container, false); getActivityContext(); setInitMemberWidgets(); setInitMemberDataVariable(); setInitOtherWorks(); return viewRoot; } protected void getArgumentsFromFragment(){} protected void setInitMemberWidgets(){} protected void setInitMemberDataVariable(){} protected void setInitOtherWorks(){}}
接下来查看该V对应的Presenter的实现,首先是它的接口:
package concretepresenter;import interfaceview.IFilePresenterView;import presenter.Presenter;/** * Created by KUATANG on 2016/10/16. */public class FileListPresenter extends Presenter<IFilePresenterView> implements FileInterface{ @Override public void doAnalizingFileClassify() { }}
该接口继承了Presenter,则说明将会注入IFilePresenterView接口从而回调更新UI,
它被FileListFragment实现,并且注入引用给对应的 mFileListPresenter.attachMvpViewManager(this);
。
- 关于MVP模式的使用设计
- 关于Android MVP设计模式
- 关于android的设计模式---MVP的个人理解
- MVP设计模式的应用
- Android的MVP设计模式
- Android的设计模式MVP
- MVP设计模式的写法
- Android 中如何使用MVP设计模式
- Android MVP 模式的使用
- Android MVP模式的使用
- Android MVP模式的使用
- MVP模式的基本使用
- Android MVP设计模式的最佳实现
- MVP模式----登陆界面的设计
- Android MVP设计模式的理解
- MVC,MVP,MVVM设计模式的比较
- mvp设计模式的个人理解
- 基于MVP设计模式的感想
- opencv学习笔记(三):几种去噪滤波器的实现
- 段错误bug的调试
- hibernate4整合spring3出现java.lang.NoClassDefFoundError: [Lorg/hibernate/engine/FilterDefinition;
- setContentView(),inflate()方法
- 单片机
- 关于MVP模式的使用设计
- [AHK]华泰证券的委托认证和用户登录窗口的自动处理
- 说说心事(一)
- OAuth2.0 Server 设计
- MaterialRefreshLayout实现下拉刷新,下拉加载更多
- effective C++值赋值运算符的写法
- 拱桥月下
- 程序命令行argc\argv
- apt-get install