Android架构模式:MVC、MVP、MVVM,及其实现方式

发布时间:2023-12-08

Android架构模式:MVC、MVP、MVVM,及其实现方式

更新:2023-05-14 07:29 在Android开发中,选择合适的架构模式对于项目的开发和后期维护都是至关重要的。Android中常用的架构模式包括MVC、MVP和MVVM。本文将深入探讨这三种架构模式的原理、实现方式以及优缺点,帮助开发者在实际项目中选择合适的架构模式。

一、MVC模式

MVC模式(Model、View、Controller)是一种将应用程序分为三个主要部分的模式,分别为业务逻辑层(Model)、表示层(View)和控制层(Controller)。这三个部分各司其职,通过分离使得应用程序更加可维护、可扩展。 在MVC中,View是用户直接接触的部分,负责展示数据。Model是封装了应用程序需要处理的数据,Controller则负责接收View的事件以及对Model的操作。 MVC模式的优点在于分离了数据操作和数据展示,方便进行单独的测试和维护。缺点在于Controller承担了过多的职责,可能会导致代码量过大,难以维护。

二、MVP模式

MVP模式(Model-View-Presenter)是在MVC模式的基础上发展而来,相对于MVC将Controller转换为Presenter,增加了代码的复杂性。相对于MVC模式,MVP更加清晰,结构更加简单明了。 MVP中,View负责展示数据和接收用户操作,Presenter负责响应用户操作,并且从Model中获取数据来更新View。Model则是数据层,封装了应用程序需要处理的数据。Presenter是View和Model之间的协调者,而且它不包含任何和Android相关的东西,便于进行单元测试。 相对于MVC模式,MVP将业务逻辑和表示层完全分离,增加了代码的代码的可读性、可维护性和可测试性,将View和Model进行了完全的解耦。

三、MVVM模式

MVVM(Model-View-ViewModel)模式是WPF和Silverlight中采用的经典UI设计模式,它类似于MVP模式,Presenter被ViewModel所替换。 MVVM中,View负责展示数据和接收用户操作,ViewModel负责协调和管理View和Model之间的数据交互。Model则是数据层,封装了应用程序需要处理的数据。 MVVM相对于MVP增加了数据绑定和命令的特性,使得更新UI和响应用户操作变得更加方便。在MVVM中,ViewModel提供了绑定到View的属性和命令,使得ViewModel改变时会自动更新View,将UI和业务逻辑解耦,代码更加简洁。

四、实现方式

下面我们将通过代码实现三种架构模式的方式:

MVC实现方式:

public class Model {
    private String mData;
    public void setData(String data) {
        this.mData = data;
    }
    public String getData() {
        return mData;
    }
}
public class View {
    public void showData(String data) {
        Log.d("MVC", data);
    }
}
public class Controller {
    private Model mModel;
    private View mView;
    public Controller(Model model, View view) {
        this.mModel = model;
        this.mView = view;
    }
    public void updateData(String data) {
        mModel.setData(data);
        mView.showData(mModel.getData());
    }
}

MVP实现方式:

public class Model {
    private String mData;
    public void setData(String data) {
        this.mData = data;
    }
    public String getData() {
        return mData;
    }
}
public interface Contract {
    interface View {
        void showData(String data);
    }
    interface Presenter {
        void getData();
    }
}
public class Presenter implements Contract.Presenter {
    private Model mModel;
    private Contract.View mView;
    public Presenter(Model model, Contract.View view) {
        this.mModel = model;
        this.mView = view;
    }
    @Override
    public void getData() {
        mModel.setData("Hello MVP!");
        mView.showData(mModel.getData());
    }
}
public class View implements Contract.View {
    private Presenter mPresenter;
    public View() {
        mPresenter = new Presenter(new Model(), this);
    }
    @Override
    public void showData(String data) {
        Log.d("MVP", data);
    }
    public void requestData() {
        mPresenter.getData();
    }
}

MVVM实现方式:

public class Model {
    private String mData;
    public void setData(String data) {
        this.mData = data;
    }
    public String getData() {
        return mData;
    }
}
public abstract class ViewModel extends BaseObservable {
    public abstract void getData();
}
public class View implements Observer {
    private ViewModel mViewModel;
    public View(ViewModel viewModel) {
        this.mViewModel = viewModel;
        mViewModel.addObserver(this);
    }
    public void showData(String data) {
        Log.d("MVVM", data);
    }
    @Override
    public void update(Observable o, Object arg) {
        if (o == mViewModel) {
            showData(((Model) arg).getData());
        }
    }
}
public class ViewModelImpl extends ViewModel {
    private Model mModel;
    public ViewModelImpl() {
        this.mModel = new Model();
    }
    @Override
    public void getData() {
        mModel.setData("Hello MVVM!");
        setChanged();
        notifyObservers(mModel);
    }
}

五、总结

本文对Android中常用的MVC、MVP和MVVM架构模式进行了详细阐述,并给出了对应的代码实现方式。三种架构模式各有优缺点,具体选择哪种模式需要根据实际项目情况而定,开发者需要根据自己的经验和项目需求进行选择。