View主要是Activity,Fragmentdom
MVP和MVC的差異ide
1.Model和View再也不直接通訊,經過中間層Presenter來實現。this
2.Activity的功能被簡化,再也不充當控制器,主要負責View層面的工做。spa
MVPPresentercode
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(); } }); } }
IMVPViewblog
public interface IMVPView { String getUserInput(); void showSuccessPage(Account account); void showFailurePage(); }
MVPModelget
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(); } } }
MVPActivityit
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("獲取數據失敗"); } }