zoukankan      html  css  js  c++  java
  • MVP的理解和使用

    MVP大家应该差不多都知道了,他其实是MVC的升华版,差不多是在view和model中加了一个调节器,这样view不能直接调用model中得数据,而是通过presenter来进行操作,此外Presenter与View和model的交互使用接口定义操作可以进一步达到松耦合也可以通过接口更加方便的进行测试。可以看一下流程图

    算了不想写了,直接上代码吧,实在是懒得写了,这也没有保存功能,服死了。

    首先定义View :

    [代码]java代码:

    1
    2
    3
    4
    5
    public interface MainView<t> {
        void initView();
        void showData(T t);
     
    }</t>

    [代码]java代码:

    01
    02
    03
    04
    05
    06
    07
    08
    09
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    public class MainActivity extends AppCompatActivity implements MainView<model>{
        private MainPresenter mainPresenter;
        private TextView textview;
        @Override
        protected void onCreate(@Nullable Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_mains);
            initView();
        }
     
        @Override
        public void initView() {
            textview = (TextView) findViewById(R.id.textview);
            mainPresenter = new MainPresenter(this);
            mainPresenter.loadData();
        }
     
        @Override
        public void showData(Model model) {
            textview.setText(model.getName());
        }
     
    }</model>

    然后定义presenter:

    [代码]java代码:

    1
    2
    3
    4
    5
    public interface Presenter<t> {
        void loadData();
        void loadDataSuccess(T t);
        void loadFail();
    }</t>

    [代码]java代码:

    01
    02
    03
    04
    05
    06
    07
    08
    09
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    public class MainPresenter implements Presenter<model>{
        private MainView mainView;
        private MainModel mainModel;
     
        public MainPresenter(MainView mainView) {
            this.mainView = mainView;
            mainModel = new MainModel(this);
        }
     
        @Override
        public void loadData() {
            mainModel.getData();
        }
     
        @Override
        public void loadDataSuccess(Model model) {
            mainView.showData(model);
        }
     
        @Override
        public void loadFail() {
     
        }
    }</model>

    最后是model的定义:

    [代码]java代码:

    01
    02
    03
    04
    05
    06
    07
    08
    09
    10
    11
    public class Model {
        String name;
     
        public String getName() {
            return name;
        }
     
        public void setName(String name) {
            this.name = name;
        }
    }

    [代码]java代码:

    01
    02
    03
    04
    05
    06
    07
    08
    09
    10
    11
    12
    public class MainModel {
        MainPresenter mainPresenter;
     
        public MainModel(MainPresenter mainPresenter) {
            this.mainPresenter = mainPresenter;
        }
        //从服务器中获取数据
        public void getData(){
            //这个方法主要是获取数据如果成功则调用MainPresenter的loadDataSuccess 方法
            //如果失败就调用MainPresenter的loadFail()方法
        }
    }

    从代码中可以看出model和view不会直接联系,都是通过presenter。各个分层更加明细。

    刚刚发表了一篇,结果没有保存到,只能重新写了,麻烦可不可以做成没有提交上,就给用户保存的功能啊。

  • 相关阅读:
    支持向量机 (三): 优化方法与支持向量回归
    支持向量机 (二): 软间隔 svm 与 核函数
    支持向量机 (一): 线性可分类 svm
    拉格朗日乘子法
    特征选择: 卡方检验、F 检验和互信息
    Python 多进程、多线程效率比较
    Umi+Dva搭建Cesium 3D开发环境
    React 项目生产版本迭代页面不刷新问题
    React-Native学习手册----搭建基于ios平台的开发环境
    Cesium 绘制点、线、面和测距
  • 原文地址:https://www.cnblogs.com/android-blogs/p/5710417.html
Copyright © 2011-2022 走看看