这几天看了下MVP模式的使用, 终于搞出来了,所以做个小记,以便以后用
MVP可以说是MVC的演化过来的,区别在于MVC的View和Modle间可以进行数据的交互,所以在MVC中一旦Modle发生了数据变化, 那么View层也要进行相应的修改,耦合性很强;但是MVP模式的Presenter作为Modle和View层的中间人,他持有双方的引用对象,而Modle和View间是没有任何联系的,完全实现了分离,这样耦合性降低,功能模块化,可维护性提高,但是不好的地就是类太他妈的多了......(个人总结,纯手打,将就看吧...)
public interface RequestModle { /** * @param cookie 这里是需要传递的参数,用什么 就传什么 * @param listener 这里是presenter给modle的监听回调 */ public void loadData(Context context,String cookie,String orgid,OnDataListener listener);}
/** * modle 的实现类 * @author MagicStrom */public class RequestModleImpl implements RequestModle{ private Listenerlistener1; private ErrorListener errorListener; @Override public void loadData(Context context,String cookie, String orgid,final OnDataListener listener) { listener1 = new Listener (){ @Override public void onResponse(InfoBean response) { if (response != null) { listener.onSuccess(response); }else{ listener.onError(); } } }; errorListener = new ErrorListener() { @Override public void onErrorResponse(VolleyError arg0) { listener.onError(); } }; String url = "www.baidu.com"; Map map = new HashMap (); map.put("orgid", orgid); CustomRequest request = new CustomRequest (url, InfoBean.class, map,listener1,errorListener); request.setSendCookie(cookie); RequestManager.getQueus(context).add(request); }}
public interface RequestPresenter { /** * 获取数据的逻辑 * @param context * @param cookie * @param orgid */ public void getData(Context context,String cookie,String orgid); }
/** * presenter的实现类 * @author MagicStrom */public class RequestPresenterImpl implements RequestPresenter,OnDataListener{ //作为中间层 presenter持有view和modle的引用 private RequestView mRequestView; private RequestModle mRequestModle; public RequestPresenterImpl(RequestView mRequestView) { this.mRequestView = mRequestView; this.mRequestModle = new RequestModleImpl(); } @Override public void onSuccess(InfoBean response) { mRequestView.showSuccess(response); } @Override public void onError() { mRequestView.showError(); } @Override public void getData(Context context, String cookie, String orgid) { mRequestModle.loadData(context, cookie, orgid, this); }}
public interface RequestView { /** * 显示失败 */ public void showError(); /** * 显示成功 */ public void showSuccess(InfoBean bean);}
以上就是modle , modle的实现, presenter, presenter的实现 和View层,当然用的时候 是Ativity和View层相关联,实现View层的接口
public interface OnDataListener { /** * 成功监听回调 */ public void onSuccess(InfoBean response); /** * 失败监听回调 */ public void onError();}
/** * 这个是使用网络请求的activity, 使用的时候可以new 出presenter的实现类,然后掉方法,并且实现view层,重写view层 的方法即可 * @author Administrator * */public class RequestActivity extends Activity implements RequestView{ private RequestPresenterImpl presenter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); presenter = new RequestPresenterImpl(this); presenter.getData(this, null, null); } @Override public void showError() { MyToastUtils.show(this, "fail------"); } @Override public void showSuccess(InfoBean bean) { MyToastUtils.show(this, "success------"); }}
上面就是我个人总结的一些, 肯定不全面,将就看吧, 不过网络请求,view层数据展示都是可以的