MVP模式架构初识且简单实现

1.概念

相对于MVC模式架构大家都已经听得够多了,那么MVP模式又是什么呢?
和MVC一样 MVP三个字母就代表三个东西
M:Model-模型:主要是实体模型,数据的存取与业务逻辑,主要负责数据的加载
V:View-视图:对应Activity(或Fragment),主要负责View的绘制以及用户交互。
P: Presenter: 负责View与Model间交互,可以理解为媒介,就像媒婆那样的功能。

2.优点

利用MVP架构的项目优点明显

  1. 降低耦合度,隐藏数据,使Activity(或Fragment)中代码更加简洁,只负责处理View的职责;
  2. 模块职责分工明确;
  3. 方便测试开发;
  4. 代码复用性较高。

3.实现

现在对于Andorid开发的MVP设计模式还没有一个统一的标准,基于MVP思想可以有很多的实现方式,而谷歌推荐的MVP实现方式中,弱化了Model的作用,将Model融入到Presenter中,定义Contract契约类作为View和Presenter的接口,定义View和Presenter需要实现的方法,View和Presenter各自实现,做到了降低耦合度使代码工整。

我们举一个具体的例子
我们点击界面中的按钮,在上方显示数据(就是一个简单的功能)
MVP模式架构初识且简单实现_第1张图片

贴上项目结构
MVP模式架构初识且简单实现_第2张图片

Constract

/**
 * @description:TODO
 * @Author MRyan
 * @Date 2020/3/2 13:50
 * @Version 1.0
 */
public interface MainConstract {
    interface MainView {
        void onShowData(String msg);
    }

    interface MainPresenter {
        void ShowData();

    }
}

上文说了Constract是一个契约接口类,里面另一个View和Presenter要实现的方法,将View和Presenter联系到一起

Presenter

/**
 * @description:TODO
 * @Author MRyan
 * @Date 2020/3/2 13:51
 * @Version 1.0
 */
public class MainPresenter implements MainConstract.MainPresenter {
    private MainConstract.MainView mainView;

    public MainPresenter(MainConstract.MainView view) {
        this.mainView = view;
    }


    @Override
    public void ShowData() {
        String msg = "这是测试";
        mainView.onShowData(msg);
    }
}

上文我们说了,Presenter是View和Model交互的地方 这里我们实现了功能并回调给(View)Activity

View

public class MainActivity extends AppCompatActivity implements MainConstract.MainView {
    private MainPresenter mainPresenter;
    private Button mShowBtn;
    private TextView mShowTev;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mShowBtn=findViewById(R.id.btn_main_show);
        mShowTev=findViewById(R.id.tev_main_show);
        mainPresenter=new MainPresenter(this);
        mShowBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                mainPresenter.ShowData();
            }
        });
    }


    @Override
    public void onShowData(String msg) {
        mShowTev.setText(msg);
    }
}

MainActivity实现了重写的onShowData()方法,在重写的方法中我们实现数据显示在TextView上

这就完成了简单的MVP模式架构
我们如果想要添加功能 很简单明了。
我们在Constract中定义需要实现的方法

/**
 * @description:TODO
 * @Author MRyan
 * @Date 2020/3/2 13:50
 * @Version 1.0
 */
public interface MainConstract {
    interface MainView {
        void onShowData(String msg);
        void onClearData();
    }

    interface MainPresenter {
        void ShowData();
        void ClearData();

    }
}

在Persenter回调方法

/**
 * @description:TODO
 * @Author MRyan
 * @Date 2020/3/2 13:51
 * @Version 1.0
 */
public class MainPresenter implements MainConstract.MainPresenter {
    private MainConstract.MainView mainView;

    public MainPresenter(MainConstract.MainView view) {
        this.mainView = view;
    }


    @Override
    public void ShowData() {
        String msg = "这是测试";
        mainView.onShowData(msg);
    }

    @Override
    public void ClearData() {
        mainView.onClearData();
    }
}

最后在Acitvity实现它

public class MainActivity extends AppCompatActivity implements MainConstract.MainView {
    private MainPresenter mainPresenter;
    private Button mShowBtn;
    private TextView mShowTev;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mShowBtn=findViewById(R.id.btn_main_show);
        mShowTev=findViewById(R.id.tev_main_show);
        mainPresenter=new MainPresenter(this);
        mShowBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                mainPresenter.ShowData();
            }
        });
        mShowBtn.setOnLongClickListener(new View.OnLongClickListener() {
            @Override
            public boolean onLongClick(View v) {
                mainPresenter.ClearData();
                return true;//这里返回True
            }
        });
    }


    @Override
    public void onShowData(String msg) {
        mShowTev.setText(msg);
    }

    @Override
    public void onClearData() {
        mShowTev.setText("");
    }
}

很简单吧,看看效果
MVP模式架构初识且简单实现_第3张图片

也许你会问这么简单的功能用MVP模式实现这么复杂,那我要告诉你着确实很复杂,但是当你的项目十分庞大它的优势就出来了。

你可能感兴趣的:(Android)