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 时。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值