经典标准MVP

  1. 简称:MVP 全称:Model(模型)-View(视图)-Presenter(表示层) ; 
    MVP 是从经典的模式MVC演变而来,它们的基本思想有相通的地方
    Controller/Presenter负责逻辑的处理,Model提供数据,View负责显示。
  2.  Model:model的工作就是完成具体的业务操作(网络请求,数据库的操作)
     Presenter:presenter的作为桥梁,将view和model的具体实现连接起来
     View:view是所需要实现的视图
  3. Mvp产生的原因:专门优化Activity和Fragment产生的
  4. Mvp的优点:View层和Model层不知相互可知,完全解耦,
       取而代之的是presenter的层充当了桥梁的作用
       view层发出的事件传递到Presenter层,presenter层操作model层,
       model层将处理完的数据返还给Presenter层,Presenter层将结果在返回给View层
    整个过程中View层和Model层完全没有关系
  5. 登录实例—三个接口:
  6. /*
     *Send_View_Message 是一个接口
     * 处理完数据后 将结果返回给这个接口
     * number 用户账号
     * word 用户密码
     */
    interface Model {
        //modle 层的接口
        void getLoginView(Send_View_Message view, String number, String word);
    }
    
    
    /**
     * user_string 处理完的结果接口
     */
    interface View {
        //view 层的接口
        void getUserBean(String user_string);
    }
    
    /**
     *
     * number 用户账号
     * word 用户密码
     */
    interface Presenter {
        //presenter 的接口
        void sendRetrofit(String number,String word);
    }
    
    /**
     * user_string 返回的结果
     */
    interface Send_View_Message{
        //model 处理完数据后 返回给这个接口
        void getString(String user_string);
    }
  7. 三个接口的实例化对象
    view层的实例化对象是对应的Activity或Fragment 实现View的接口(注意包)
    //创建p层
     login_presenter = new Login_Presenter(this);
    
    //调用p层中的方法
    login_presenter.sendRetrofit(numbe r,word);
    //重写接口中的方法
    
    /**
     * @param user_string mvp处理完的接口回掉
     */
    @Override
    public void getUserBean(String user_string) {
    //请求完的结果 在此方法中更新UI
        Log.i("login",user_string);
    }

  8. 三个接口的实例化对象
    presenter的实例化接口
    
    
    public class Login_Presenter implements Login_Contract.Presenter {
    
        Login_Contract.View view;
        Login_Contract.Model model;
    
        /**
         * 创建p层时 p层持有V层和M层
         * @param view 创建P层时传过来的V层实例化对象
         */
        public Login_Presenter(Login_Contract.View view) {
            //将V取出来
            this.view=view;
            model=new Login_Model();
        }
    
        /**
         * 调用P层的sendRetrofit方法时 操作model层做业务处理
         * @param number 用户名
         * @param word 密码
         */
        @Override
        public void sendRetrofit(String number, String word) {
            /**
             * model层操作完之后 讲结果返回给当前接口
             */
            model.getLoginView(new Login_Contract.Send_View_Message() {
                @Override
                public void getString(String user_string) {
                    //获取到返回的数据 将结果返回给view层
                    view.getUserBean(user_string);
                }
            }, number, word);
        }
    }
  9. 三个接口的实例化对象
    presenter的实例化接口
    
    public class Login_Model implements Login_Contract.Model {
    
        @Override
        public void getLoginView(Login_Contract.Send_View_Message view, String number, String word) {
            if("123".equals(number) && "abc".equals(word)){
                //为接口赋值
                view.getString("登录成功");
            }else{
                //为接口赋值
                view.getString("登录失败");
            }
        }
    }
  10. 此时:v层创建p层(p层获取到了v层和m层的实例化对象)
      v层调用p层中的方法
     p层中的这个方法调用了m层的方法
    
     m层做业务处理
    ,处理完之后通过接口返回给P层
     p层在给v层的接口赋值
    
     这时--》v层的实现类(就是我们的Activity或Fragment)
    
     重写接口中的方法就会收到处理完的结果
    
     我们在此方法中更新UI
    
  11. 我们要根据我们项目的自身需求 来编写不同写法 希望大家不要被具体的代码所困住。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值