android开发MVP模式的简单应用

关于MVP模式的介绍我也就不再多说了,网上一大推,简要的说下MVP模式下的4个要素,然后直接上代码。 

 在MVP模式里通常包含4个要素:

     (1)View:负责绘制UI元素、与用户进行交互(在Android中体现为Activity);

     (2)View interface:需要View实现的接口,View通过View interface与Presenter进行交互,降低耦合,方便进行单元测试;

     (3)Model:负责存储、检索、操纵数据(有时也实现一个Model interface用来降低耦合);

     (4)Presenter:作为View与Model交互的中间纽带,处理与用户交互的负责逻辑

modle包下请求数据,presenter包下进行modle和View的联调,ui包下为View,entity包下为Bean。

开始上代码:

(1):

public interface PresenterCallback {
    void load(String url);
    void getData(BeanEntity beanEntity);
}
博主英文一般般,起码方法名还是见名知意。

(2):

public interface DownLoadCallBack {
    void load(String url, PresenterCallback presenterCallback);
}
此处方法的第二参数为什么是(1)中的接口对象?接着往下看就很快明白了

(3):

public interface UICallBack {
    void getData(BeanEntity beanEntity);
}
这个接口的目的,是为了在View中回调接口,获取数据。

(4):

public class DownLoad implements DownLoadCallBack {
    private Handler handler = new Handler();

    @Override
    public void load(final String url, final PresenterCallback presenterCallback) {
        //此处起线程网络请求数据
        new Thread(new Runnable() {
            @Override
            public void run() {
                try {
                    Thread.sleep(3000);
		//真实网络请求数据,得到数据后在此处进行解析。
                    handler.post(new Runnable() {
                        @Override
                        public void run() {
                            presenterCallback.getData(new BeanEntity("下载完成" + url));
                        }
                    });
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }).start();
    }
}
此处解释了刚才DownLoadCallBack接口中的load()的第二个参数为什么是PresenterCallBack了,就是为了回调得到数据。

(5):

public class Presenter implements PresenterCallback {
    private UICallBack uiCallBack;
    private DownLoadCallBack downLoadCallBack;
    public Presenter(UICallBack uiCallBack) {
        this.uiCallBack = uiCallBack;
        downLoadCallBack=new DownLoad();
    }
    @Override
    public void load(String url) {
        downLoadCallBack.load(url,this);
    }

    @Override
    public void getData(BeanEntity beanEntity) {
        uiCallBack.getData(beanEntity);
    }
}

此处downloadCallBack=new DownLoad();运用了java中的多态,父类引用指向子类对象,调用子类重写的方法。

代码写到这里MVP已经完成差不多了,就差最后一步了。

(6):

public class MainActivity extends AppCompatActivity implements UICallBack {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        new Presenter(this).load("api接口");
    }

    @Override
    public void getData(BeanEntity beanEntity) {
        String data = beanEntity.getData();
        Log.i("-----",data);
    }
}
走到这之后,MVP模式代码其实已经写完了,我们一起来看看log日志。


显然结果正是我们想要的,我们再来一起看看MainActivity中的代码,是不是只是对UI进行处理和一些逻辑的判断,MVP模式就是一种设计思想,有的人喜欢再把解析分离出来,虽然说分包能多一点,但是代码看起来结构更明显,可读性也大大增强。希望此篇博文对你有帮助。




发布了16 篇原创文章 · 获赞 14 · 访问量 4万+

猜你喜欢

转载自blog.csdn.net/liulong_/article/details/53698801