Android MVC MVP MVVM (二)

MVP模型

 

 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("獲取數據失敗");
    }
}
相關文章
相關標籤/搜索