简单MVP架构实现+回调练习

回调:A实现接口Callback,重写了方法callback(),在这里callback方法是具体的实现方法,我的理解是回调向外暴漏接口,但是需要数据,要通过B类的数据实现不一样的重写。B中含有某个方法,这个方法的有一个参数是实现了A的实例(A实现了接口),B的这个方法也可以获得外部重写方法所需要的数据,所以在B 的这个方法中才是真正调用已经重写好的外部方法。

在这里插入图片描述

实例:
接口ResultListener相当于接口Callback,里面的getResult方法相当于callback()方法。

package com.siyusoulmate.huidiaotest;

public interface ResultListener {
    void getResult(int result);
}

MainActivity相当于A,MainActivity实现了接口ResultListener (CallBack)

package com.siyusoulmate.huidiaotest;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.util.Log;
//用回调实现model将result传递给presenter处理(为什么要传递?传递出去可以实现多个不同的处理)
public class MainActivity extends AppCompatActivity implements ResultListener {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //将实现了ResultListener的自身传递给Model作为参数
        Model model=new Model(this);
//        Log.e("m", "onCreate: "+model.getResult());
        model.handle();
    }
//重写方法,在B中实际调用的是这个方法
    @Override
    public void getResult(int result) {
//        实际处理
        Log.e("TAG", "getResult: "+result );
    }
}

Model相当于B,Model中含有构造函数,构造函数中有ResultListener作为参数,实际传递的是A的实例,以为A已经实现了ResultListener,所以可以将A的实例传递给ResultListener。

package com.siyusoulmate.huidiaotest;

public class Model {
   private int result;
    private ResultListener resultListener;
    public Model( ResultListener listener){
    //这里获得了重写了具体方法的listener
        resultListener=listener;
    }
    private void getResult(){
//        模拟网络读取到结果result,将result交由外部处理
         result= (int) (Math.random()*100);
//        return  result;
    }

    public void handle(){
        getResult();
        if(resultListener!=null){
        //因为这里的resultListener是A,那便是调用A中重写的getResult
            resultListener.getResult(result);
        }
    }

  /*  public void setResult(int result) {
        this.result = result;
    }*/
}

MVP实例:
回调接口:

package com.siyusoulmate.myapplication7;

public interface ResultListener {
    void getResult(int result);
}

model层:

package com.siyusoulmate.myapplication7;

import android.util.Log;

public class ModelClass {
    //假设通过网络请求获得的结果为33;
    private int result=33;
    public void login(String userName,String password,ResultListener listener){
        Log.e("TAG", "login: "+password+userName );
        listener.getResult(result);
    }
}

presenter层:

package com.siyusoulmate.myapplication7;

public class PresenterClass {
    private ModelClass modelClass;
    private loginView loginView;
    public PresenterClass(loginView loginView){
        this.loginView=loginView;
        modelClass=new ModelClass();
    }
    public void login(String userName,String password){
        modelClass.login(userName, password, new ResultListener() {
            @Override
            public void getResult(int result) {
                if(loginView!=null){
                    loginView.loginResult(result);
                }
            }
        });
    }
}

view层:

package com.siyusoulmate.myapplication7;

public interface loginView {
    void loginResult(int result);
}

package com.siyusoulmate.myapplication7;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity implements loginView{
private PresenterClass presenterClass;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        presenterClass=new PresenterClass(this);
        presenterClass.login("111","222");
    }

    @Override
    public void loginResult(int result) {
        Toast.makeText(this,"chenggong",Toast.LENGTH_LONG).show();
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值