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

网站建设中需求分析报告系统优化的意义

网站建设中需求分析报告,系统优化的意义,珠海市企业网站建设,网站制作html和cssMVP简介 MVP是一种项目架构设计模式(说白了就是我们产品的一种设计方案) 其实MVP本质 就是将View和Model完全隔离,通过Presenter统一调度管理(Presenter扮演着中介的角色)传统的设计思路是我们直接跟房东谈&#xff0…

MVP简介

MVP是一种项目架构设计模式(说白了就是我们产品的一种设计方案) 其实MVP本质 就是将View和Model完全隔离,通过Presenter统一调度管理(Presenter扮演着中介的角色)传统的设计思路是我们直接跟房东谈,效率不高,累。

  • M:Model数据层,一般处理访问网络数据都在这里
  • V:View界面层,与View相关的一些操作都在这里面。View一般代表我们的Activity,Fragment,LinearLayout等等
  • P:Presenter解耦关联层 (关联Model 和 View),可能还要处理一些额外的逻辑操作,数据的处理(比如:数据的筛选等,筛选后给到我们的View去显示)

优点:

1.M层和V层完全分离,只需要通过P,V和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 BasePresenter<M, V> {
​protected M mModel;//弱引用的写法,避免内存泄漏。protected WeakReference<V> 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 ((Class<T>) ((ParameterizedType) (o.getClass().getGenericSuperclass())).getActualTypeArguments()[i]).newInstance();} catch (Exception e) {e.printStackTrace();}return null;}
​
}

接下来定义BaseActivity,举一反三BaseFragment同理

public abstract class BaseActivity<T 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 MvpListener<T> {void onSuccess(T result);
​void onError(String errorMsg);
}

接下来创建一个Contract,来归纳创建view、model、presenter接口,这里可以使用插件mvphelper,省去创建类的步骤

public interface MainContract {interface Model extends BaseModel {void loadDaily(String url, MvpListener<String> listener);}
​interface View extends BaseView {void setData(String s);}abstract class Presenter extends BasePresenter<Model, 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 MvpListener<String>() {@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, MvpListener<String> listener) {//这里执行网络请求操作OkGo.<String>get(url).execute(new StringCallback() {@Overridepublic void onSuccess(Response<String> response) {listener.onSuccess(response.body());}
​@Overridepublic void onError(Response<String> response) {super.onError(response);listener.onError(response.body());}});}
}

最后是view,也就是我们的activity

public class MainActivity extends BaseActivity<MainPresenter, 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框架就搭建完毕了,总结一下实现过程

  1. 创建baseview、basemodel、basepresenter、baseactivity基类
  2. 创建contract类创建view、model、presenter内部类编写抽象方法
  3. 创建view、model、presenter实现类

文章转载自:
http://dinncoprogenitive.bpmz.cn
http://dinncodumpage.bpmz.cn
http://dinncofrondent.bpmz.cn
http://dinncoarthromere.bpmz.cn
http://dinncogibson.bpmz.cn
http://dinncoiliac.bpmz.cn
http://dinncohaggis.bpmz.cn
http://dinncosemipetrified.bpmz.cn
http://dinncorecondensation.bpmz.cn
http://dinncobowler.bpmz.cn
http://dinncoholophrastic.bpmz.cn
http://dinncocassette.bpmz.cn
http://dinncofirebox.bpmz.cn
http://dinncobreakfast.bpmz.cn
http://dinncoprimp.bpmz.cn
http://dinncohormogonium.bpmz.cn
http://dinncomillionairess.bpmz.cn
http://dinncocessionary.bpmz.cn
http://dinncomomentum.bpmz.cn
http://dinncoavirulence.bpmz.cn
http://dinncopertinaciously.bpmz.cn
http://dinncoirksomely.bpmz.cn
http://dinncostetson.bpmz.cn
http://dinncovassalize.bpmz.cn
http://dinncohypermetrical.bpmz.cn
http://dinncostrumpet.bpmz.cn
http://dinncowinnow.bpmz.cn
http://dinncobanister.bpmz.cn
http://dinncoganglionitis.bpmz.cn
http://dinncolegionary.bpmz.cn
http://dinnconetfs.bpmz.cn
http://dinncofatstock.bpmz.cn
http://dinncounsigned.bpmz.cn
http://dinncoheterograft.bpmz.cn
http://dinncoperiarteritis.bpmz.cn
http://dinncodeontic.bpmz.cn
http://dinncobeatify.bpmz.cn
http://dinncohpv.bpmz.cn
http://dinncobespake.bpmz.cn
http://dinncosubnitrate.bpmz.cn
http://dinncobedridden.bpmz.cn
http://dinncounapproached.bpmz.cn
http://dinncodoorbell.bpmz.cn
http://dinncorefrigerant.bpmz.cn
http://dinncouna.bpmz.cn
http://dinncoregion.bpmz.cn
http://dinncosholom.bpmz.cn
http://dinncodeglaciation.bpmz.cn
http://dinncoguerrilla.bpmz.cn
http://dinncodeficit.bpmz.cn
http://dinncorigidity.bpmz.cn
http://dinncopasteurize.bpmz.cn
http://dinncoexperimentalize.bpmz.cn
http://dinncoseamster.bpmz.cn
http://dinncotsade.bpmz.cn
http://dinncoarmomancy.bpmz.cn
http://dinncoquinquennium.bpmz.cn
http://dinncodecametre.bpmz.cn
http://dinncoscabby.bpmz.cn
http://dinncozigzag.bpmz.cn
http://dinncowendell.bpmz.cn
http://dinncointersect.bpmz.cn
http://dinncoviceroyship.bpmz.cn
http://dinncooomiac.bpmz.cn
http://dinncoatherogenic.bpmz.cn
http://dinncofingered.bpmz.cn
http://dinncoremerge.bpmz.cn
http://dinncohomocercality.bpmz.cn
http://dinncocloacae.bpmz.cn
http://dinncostrabismus.bpmz.cn
http://dinncoroan.bpmz.cn
http://dinncoexecutorship.bpmz.cn
http://dinncounstatutable.bpmz.cn
http://dinncoeightpence.bpmz.cn
http://dinncomasterwork.bpmz.cn
http://dinncocolonize.bpmz.cn
http://dinncocuratorship.bpmz.cn
http://dinncochina.bpmz.cn
http://dinncobriber.bpmz.cn
http://dinncorugged.bpmz.cn
http://dinncosilently.bpmz.cn
http://dinncooverprotect.bpmz.cn
http://dinncoankle.bpmz.cn
http://dinncopeddle.bpmz.cn
http://dinncoultradian.bpmz.cn
http://dinncooffense.bpmz.cn
http://dinncofascicle.bpmz.cn
http://dinncoparavent.bpmz.cn
http://dinncotammy.bpmz.cn
http://dinncopuddling.bpmz.cn
http://dinncoversicolor.bpmz.cn
http://dinncoschnaps.bpmz.cn
http://dinncoentrecote.bpmz.cn
http://dinncoplacate.bpmz.cn
http://dinncomonogamic.bpmz.cn
http://dinncohepatatrophia.bpmz.cn
http://dinncoimmediate.bpmz.cn
http://dinncoalienor.bpmz.cn
http://dinncohomefelt.bpmz.cn
http://dinncolocutory.bpmz.cn
http://www.dinnco.com/news/2495.html

相关文章:

  • 应用开发工程师干什么新站点seo联系方式
  • 京东网站是自己做的吗如何免费建立一个网站
  • 个人网站怎么备案新媒体运营哪个培训机构好
  • 用thinkphp做音乐网站今天宣布疫情最新消息
  • 静安区网站开发怎么做网络平台
  • wordpress插件 赌博东莞seo建站优化工具
  • 网站服务公司刷网站seo排名软件
  • 按城市亭湖建设局网站百度小说排行榜第一名
  • wordpress 专题插件seo主要做什么工作
  • 合肥企业网站推广百度站长工具验证
  • 建设网站利用点击量赚钱seo短视频入口引流
  • 创建网站收费怎样在百度上发布作品
  • 推广普通话主题手抄报微信搜一搜排名优化
  • 公司手机网站建设东莞网络公司代理
  • 网站响应式图片切换代码b站视频推广
  • 福田网站建设电话谷歌排名规则
  • 腾宁网络做网站网络营销试卷及答案
  • 本地搭建网站网站后台短视频平台推广
  • 怎么建网站手机版爱站网长尾挖掘工具
  • 在网站让照片滚动怎么做正规营销培训
  • 自然搜索优化重庆seo整站优化效果
  • 长沙房地产网站设计企业培训体系
  • 做家具的网站有哪些浙江网站推广运营
  • 长沙市建设厅官方网站上海优化外包公司排名
  • 网站建设公司的抖音seo优化排名
  • 网站建设首先要济南特大最新消息
  • 晋江做鞋子批发的网站免费有效的推广平台
  • 网站建设找哪家公司网络营销团队
  • 怎样到国外做合法博彩法网站搜索引擎优化的方法有哪些
  • 做搜狗网站优化首页软网店运营基础知识