
MVP模型
View主要是Activity,Fragment
MVP和MVC的差别
1.Model和View不再直接通信,通过中间层Presenter来实现。
2.Activity的功能被简化,不再充当控制器,主要负责View层面的工作。
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("获取数据失败");
}
}