当前位置: 首页 > news >正文

59网站一起做网店设计网站 站什么网

59网站一起做网店,设计网站 站什么网,百度竞价推广怎么做,告诉搜索引擎网站建设中MVP简介 MVP是一种项目架构设计模式#xff08;说白了就是我们产品的一种设计方案#xff09; 其实MVP本质 就是将View和Model完全隔离#xff0c;通过Presenter统一调度管理#xff08;Presenter扮演着中介的角色#xff09;传统的设计思路是我们直接跟房东谈#xff0…MVP简介 MVP是一种项目架构设计模式说白了就是我们产品的一种设计方案 其实MVP本质 就是将View和Model完全隔离通过Presenter统一调度管理Presenter扮演着中介的角色传统的设计思路是我们直接跟房东谈效率不高累。 MModel数据层一般处理访问网络数据都在这里VView界面层与View相关的一些操作都在这里面。View一般代表我们的ActivityFragmentLinearLayout等等PPresenter解耦关联层 关联Model 和 View可能还要处理一些额外的逻辑操作数据的处理比如数据的筛选等筛选后给到我们的View去显示 优点 1.M层和V层完全分离只需要通过PV和P层的桥梁哪个部分出现问题方便修改。只需要找对应的层级就可以  2.适合多人开发 代码的复用性强 缺点 1.接口回掉多类的数量增多 MVP架构搭建流程 思维构图 从0到1搭建MVP架构 在里面新建两个接口Interface分别取名 BaseView 和 BaseModel这里定义一些公共方法 public interface BaseView {void showLoading();void hideLoading();void showError(); ​ } ​ public interface BaseModel { ​ }接下来定义一个抽象类取名 BasePresenter public abstract class BasePresenterM, V { ​protected M mModel;//弱引用的写法避免内存泄漏。protected WeakReferenceV mView;protected void onAttach(M m, V v) {mView new WeakReference(v);mModel m;}//检测 V 是否已关联 Pprotected boolean isViewAttached() {return null ! mView null ! mView.get();}protected V getView() {return isViewAttached() ? mView.get() : null;}protected void onDetach() {if (null ! mView) {mView.clear();mView null;}} ​ }该类则用于反射获取指定泛型 public class ReflectUtil { ​public static T T getT(Object o, int i) {try {return ((ClassT) ((ParameterizedType) (o.getClass().getGenericSuperclass())).getActualTypeArguments()[i]).newInstance();} catch (Exception e) {e.printStackTrace();}return null;} ​ }接下来定义BaseActivity举一反三BaseFragment同理 public abstract class BaseActivityT extends BasePresenter, M extends BaseModel extends AppCompatActivity implements BaseView { ​protected T mPresenter;protected M mModel;Overrideprotected void onCreate(Nullable Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(getLayoutId());//通过反射获取presenter model对象mPresenter ReflectUtil.getT(this, 0);mModel ReflectUtil.getT(this, 1);//绑定mPresenter.onAttach(mModel, this);initView();}protected abstract int getLayoutId();protected abstract int initView();Overridepublic void showLoading() {}Overridepublic void hideLoading() {}Overridepublic void showError() {}Overrideprotected void onDestroy() {super.onDestroy();//解绑mPresenter.onDetach();} }创建接口 MvpListener用于数据从 M 到 V 的层间传递 public interface MvpListenerT {void onSuccess(T result); ​void onError(String errorMsg); }接下来创建一个Contract来归纳创建view、model、presenter接口这里可以使用插件mvphelper省去创建类的步骤 public interface MainContract {interface Model extends BaseModel {void loadDaily(String url, MvpListenerString listener);} ​interface View extends BaseView {void setData(String s);}abstract class Presenter extends BasePresenterModel, View {abstract void loadData(String url);} }然后实现这三层首先是presenter public class MainPresenter extends MainContract.Presenter {Overrideprotected void loadData(String url) {MainContract.View mView getView();if (mView null) {return;} ​mView.showLoading();//调用model方法获取网络请求回调结果mModel.loadDaily(url, new MvpListenerString() {Overridepublic void onSuccess(String result) {mView.hideLoading();mView.setData(result);}Overridepublic void onError(String errorMsg) {mView.hideLoading();mView.showError();}});} }接下来是model我这里网络请求使用的okgo这个根据自己喜好用什么都一样需要在成功跟失败的回调里去调用自定义的mvplistener public class MainModel implements MainContract.Model {Overridepublic void loadDaily(String url, MvpListenerString listener) {//这里执行网络请求操作OkGo.Stringget(url).execute(new StringCallback() {Overridepublic void onSuccess(ResponseString response) {listener.onSuccess(response.body());} ​Overridepublic void onError(ResponseString response) {super.onError(response);listener.onError(response.body());}});} }最后是view也就是我们的activity public class MainActivity extends BaseActivityMainPresenter, MainModel implements MainContract.View { ​private static final Locale LOCALE Locale.CHINA;Overrideprotected int getLayoutId() {return R.layout.activity_main;}Overrideprotected void initView() {mPresenter.loadData(http://news.at.zhihu.com/api/4/news/before/ format(new Date(), yyyyMMdd));} ​​Overridepublic void setData(String s) {Toast.makeText(this, 请求结果 s, Toast.LENGTH_SHORT).show();}public static String format(Date date, String s) {return new SimpleDateFormat(s, LOCALE).format(date);} }本文意在搭建mvp就不去做数据列表展示了在这里做了一个toast贴上成功的截图 全文介绍了MVP的介绍及原理再到0至1的搭建过程更多架构学习技术可参考《Android核心技术手册 》点击查看。需要的获取一下。 总结 最后到这里mvp框架就搭建完毕了总结一下实现过程 创建baseview、basemodel、basepresenter、baseactivity基类创建contract类创建view、model、presenter内部类编写抽象方法创建view、model、presenter实现类
http://www.w-s-a.com/news/96790/

相关文章:

  • 网站建设贵阳东莞网站建设策划
  • 网站5建设需要学什么桃城网站建设公司
  • 杭州外贸网站企业门户网站的安全性
  • 建设论坛网站需要做什么水果电商网站建设相关文献
  • 群晖 nas 做网站建设网站的报价
  • 白山做网站网站建设 app 优化
  • 畜牧业网站建设官方网站下载拼多多app
  • 网站规划和布局备案网站地址
  • 站长工具流量统计招工信息发布平台
  • 上海网站建设公司排行建设无障碍网站
  • phpcms网站打不开网页制作网站设计稿
  • 博客网站开发环境wordpress 中英文双语
  • 做网站报价表群辉装wordpress
  • 请人做游戏的网站视觉设计师的工作内容
  • 昆明网站建设知名企业博客网站开发
  • 如何做网站网页免费thinkphp网站后台模板
  • 怎么自己做优惠券网站济南小程序开发
  • 南昌网站专业制作做仿站如何获取网站源码
  • qq钓鱼网站wordpress 企业站模板
  • 推进文明网站建设免费设计公司logo设计
  • 做电脑租赁网站server 2008 网站部署
  • 做网站的公司一年能赚多少钱wordpress作者增加分类插件
  • 苏州尚云网站建设专业摄影网站推荐
  • 020网站开发微信公众号直接链接网站怎么做
  • 学做烘焙的网站某网站注册需要邮箱是怎么弄
  • 网站的特效代码公司网站开发的工作内容
  • 网站制作哪家好商城网站建设预算要多少钱
  • 怎么做律所的官方网站微网站可以做商城吗
  • 通用网站后台管理系统(php版)网站备案ip查询网站查询
  • 制作网站代码吗江阴网站建设推广