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。各个分层更加明细。

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

  • 相关阅读:
    jmeter(46) redis
    jmeter(45) tcp/ip协议
    Codeforces Round #538 (Div. 2)D(区间DP,思维)
    Codeforces Global Round 1D(DP,思维)
    Educational Codeforces Round 57D(DP,思维)
    UPC11073(DP,思维)
    Yahoo Progamming Contest 2019D(DP,思维)
    Atcoder Beginner Contest 118D(DP,完全背包,贪心)
    Xuzhou Winter Camp 1C(模拟)
    Educational Codeforces Round 57 (Rated for Div. 2)D(动态规划)
  • 原文地址:https://www.cnblogs.com/android-blogs/p/5710417.html
Copyright © 2011-2022 走看看