Android MVC MVP MVVM (二)

时间:2023-03-09 09:05:50
Android MVC MVP MVVM (二)

MVP模型

Android MVC MVP MVVM (二)

View主要是Activity,Fragment

MVP和MVC的差别

1.Model和View不再直接通信,通过中间层Presenter来实现。

2.Activity的功能被简化,不再充当控制器,主要负责View层面的工作。

Android MVC MVP MVVM (二)

Android MVC MVP MVVM (二)

 MVPPresenter

public class MVPPresenter {
private IMVPView view;
private MVPModel model; public MVPPresenter(IMVPView view) {
this.view=view;
model=new MVPModel();
} public void getData(String accountName) {
model.getAccountData(accountName, new ResultCallback() {
@Override
public void onSuccess(Account account) {
view.showSuccessPage(account);
} @Override
public void onFailure() {
view.showFailurePage();
}
});
} }

IMVPView

public interface IMVPView {
String getUserInput(); void showSuccessPage(Account account); void showFailurePage();
}

MVPModel

public class MVPModel {
public void getAccountData(String accountName, ResultCallback cb) {
Random random=new Random();
boolean isSuccess=random.nextBoolean();
if (isSuccess) {
Account account = new Account();
account.setName(accountName);
account.setLevel(100);
cb.onSuccess(account);
} else {
cb.onFailure();
}
}
}

MVPActivity

public class MVPActivity extends AppCompatActivity implements IMVPView{
private TextView tvResult;
private EditText etAccount;
private MVPPresenter presenter; @Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.test);
tvResult = findViewById(R.id.tvResult);
etAccount = findViewById(R.id.etAccount);
presenter = new MVPPresenter(this);
} public void ButtonClick(View view) {
presenter.getData(getUserInput());
} @Override
public String getUserInput() {
return etAccount.getText().toString();
} @Override
public void showSuccessPage(Account account) {
tvResult.setText("用户账号: "+account.getName()+ " | "+"用户等级: "+account.getLevel());
} @Override
public void showFailurePage() {
tvResult.setText("获取数据失败");
}
}