当前位置: 首页 > article >正文

MVC MVP MVVM架构 在Android中的体现

MVC:

M表示数据,V表示UI,C用于协调Model和View之间的交互

实例代码

Model

public class UserModel {
    private String username;
    private String email;

    public UserModel(String username, String email) {
        this.username = username;
        this.email = email;
    }

    public String getUsername() {
        return username;
    }

    public String getEmail() {
        return email;
    }
}

View:

public class UserView {
    public void displayUserInfo(String username, String email) {
        System.out.println("User Info: " + username + ", " + email);
    }
}

Controller:

public class UserController {
    private UserModel model;
    private UserView view;

    public UserController(UserModel model, UserView view) {
        this.model = model;
        this.view = view;
    }

    public void updateView() {
        view.displayUserInfo(model.getUsername(), model.getEmail());
    }
}

MainActivity中:

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        UserModel userModel = new UserModel("JohnDoe", "john@example.com");
        UserView userView = new UserView();
        UserController userController = new UserController(userModel, userView);
        
        // Display user info
        userController.updateView();
    }
}

MVP :用Presenter 替代了 Controller,它充当了视图和模型之间的中介,负责业务逻辑。

Model:

public class UserModel {
    private String username;
    private String email;

    public UserModel(String username, String email) {
        this.username = username;
        this.email = email;
    }

    public String getUsername() {
        return username;
    }

    public String getEmail() {
        return email;
    }
}

View:

public interface UserView {
    void displayUserInfo(String username, String email);
}

Presenter:

public class UserPresenter {
    private UserModel model;
    private UserView view;

    public UserPresenter(UserModel model, UserView view) {
        this.model = model;
        this.view = view;
    }

    public void updateView() {
        view.displayUserInfo(model.getUsername(), model.getEmail());
    }
}

MainActivity:

public class MainActivity extends AppCompatActivity implements UserView {

    private UserPresenter presenter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        UserModel userModel = new UserModel("JohnDoe", "john@example.com");
        presenter = new UserPresenter(userModel, this);

        // Display user info via presenter
        presenter.updateView();
    }

    @Override
    public void displayUserInfo(String username, String email) {
        System.out.println("User Info: " + username + ", " + email);
    }
}

MVVM :ViewModel是负责从model获取数据并且将其准备好供View使用的类,View和View之间通过数据绑定进行交互

Model:

public class UserModel {
    private String username;
    private String email;

    public UserModel(String username, String email) {
        this.username = username;
        this.email = email;
    }

    public String getUsername() {
        return username;
    }

    public String getEmail() {
        return email;
    }
}

ViewModel:

public class UserViewModel extends ViewModel {
    private MutableLiveData<UserModel> userLiveData;

    public UserViewModel() {
        userLiveData = new MutableLiveData<>();
    }

    public LiveData<UserModel> getUserLiveData() {
        return userLiveData;
    }

    public void fetchUserData() {
        // Mock data
        UserModel userModel = new UserModel("JohnDoe", "john@example.com");
        userLiveData.setValue(userModel);
    }
}

MainActivity:

public class MainActivity extends AppCompatActivity {

    private UserViewModel userViewModel;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        userViewModel = new ViewModelProvider(this).get(UserViewModel.class);
        userViewModel.getUserLiveData().observe(this, userModel -> {
            // Update UI with user data
            System.out.println("User Info: " + userModel.getUsername() + ", " + userModel.getEmail());
        });

        userViewModel.fetchUserData();
    }
}

关键区别:

  1. MVC

    • Controller 处理 UI 逻辑和业务逻辑,ViewController 紧密耦合。
    • 通常不适用于 Android,因为 Android 中的 Activity/Fragment 既是 View 又是 Controller,可能导致过多的职责。
  2. MVP

    • Presenter 负责所有的逻辑,而 View 只负责显示内容。
    • 比较适合 Android,因为可以通过接口实现松耦合,测试也更容易。
  3. MVVM

    • 使用 LiveDataViewModel 进行数据绑定,使得 UI 更新与数据的变化解耦。
    • 非常适合使用 Jetpack 组件的 Android 应用,特别是当使用 DataBinding 时。


http://www.kler.cn/a/561706.html

相关文章:

  • javascript-es6 (五)
  • pytest下allure
  • MySQL索引失效
  • ROS的action通信——实现阶乘运算(三)
  • openstack ironic ipa 以及用户镜像制作
  • 企业如何通过云计算提高数据的可访问性
  • Siddon算法中对参数值α的解释
  • java给钉钉邮箱发送邮件
  • RK3399 Android7双WiFi功能实现
  • 灵犀互娱游戏测试开发一面面经
  • 音视频入门基础:RTP专题(12)——RTP中的NAL Unit Type简介
  • GGUF 文件格式全解析
  • Spring Boot 中的日志管理
  • ROS ur10机械臂添加140夹爪全流程记录
  • 20-R 绘图 - 饼图
  • 高中数学基础-统计和概率
  • 在 Mac mini M2 上本地部署 DeepSeek-R1:14B:使用 Ollama 和 Chatbox 的完整指南
  • DeepSeek 提示词:基础结构
  • MQTT实现智能家居------2、写MQTT程序的思路
  • 为什么MySQL选择使用B+树作为索引结构