MVP架构的基础实现

MVP架构的基础实现

大学开学加入了一个部门,寒假任务下来了就是做一个app,如果用到MVP架构可以额外加分,于是上网学习了一下,为了加深印象,在这里简单记录一下,也便于以后温习。

MVP分别代表什么就不用累述了。其目的就是为了实现View层和Model层的解耦,提高拓展性。

基本思路就是 Presenter层持有View层和Model层的引用,从而实现通过Presenter来实现VM两者的通信,从而降低耦合。
多说无益,我写了一个用MVP架构实现的demo(虽然有点强行使用MVP的意思):点击按钮更新Textview显示的数字。代码如下

VIew层:

View接口:

public interface ViewInterface{
    /**
     * 加载事件设置,设置界面的事件如点击什么的
     */
    void initEvent();

    /**
     * 设置textview文字
     */
    void initView(String s);
}

view类:实现以上接口

 /**
     * 初始化事件,这里我们给button设置点击 点一下请求一个数字
     */
    @Override
    public void initEvent() {
        Button button = findViewById(R.id.request);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                presenter.request();
            }
        });
    }
    /**
     * 初始化UI 这里让textView显示数字
     * @param s
     */
    @Override
    public void initView(String s) {
        TextView textView = findViewById(R.id.textv);
        textView.setText(s);
    }

Model层

接口:

/**
 * Model接口进行数据获取
 */
public interface ModelInt {
    void getData(compete compete);

    /**
     * 回调
     */
    interface compete{
        void load(String s);
    }
}

Model类:

public class Model implements ModelInt {
    @Override
    public void getData(compete compete) {
        Random random = new Random();
        int a = random.nextInt(12);
        compete.load(String.valueOf(a));
    }
}

Presenter 层

public class Presenter {
    /***
     * view层接口
     */
   private ViewInterface viewInterface;
    /**
     * model层接口
     */
   private ModelInt modelInt;

    public Presenter(ViewInterface viewInterface) {
        this.viewInterface = viewInterface;
        modelInt = new Model();
    }

    /**
     * 获取VIew层的请求
     * 并获取数据
     * 然后调用show()更新UI
     */
    public void request(){
        show();
    }

    /**
     * 关键步骤
     * 更新View的UI
     */
    public void show(){
        modelInt.getData(new ModelInt.compete() {
            @Override
            public void load(String s) {
                viewInterface.initView(s);
            }
        });
    }
}

本人也才接触相关知识不久,相当于一个小白,如有错误请大家指出,最后附上Demo源码Demo

发布了1 篇原创文章 · 获赞 0 · 访问量 2
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 深蓝海洋 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览