MVP的模式在于将原来activity中业务逻辑的部分剥离出来,代码示例如下:
- Account
public class Account {private String mUsername;private String mPassword;public String getmUsername() {return mUsername;}public void setmUsername(String mUsername) {this.mUsername = mUsername;}public String getmPassword() {return mPassword;}public void setmPassword(String mPassword) {this.mPassword = mPassword;} }
- IAccountModel
public interface IAccountModel {void setAccount(String username, String password);Account getAccount(); }
- AccountModel
public class AccountModel implements IAccountModel {private Account mAccount;public AccountModel(){mAccount = new Account();}@Overridepublic void setAccount(String username, String password) {mAccount.setmUsername(username);mAccount.setmPassword(password); }@Overridepublic Account getAccount() {return mAccount;} }
- AccountPresenter
public class AccountPresenter {private IAccountModel mAccountModel;private IAccountView mAccountView;//view的实现还是在activity中public AccountPresenter(IAccountView view){mAccountView = view;mAccountModel = new AccountModel();}//初始化账号显示,该业务逻辑被封装在presenter中public void initAccount(String username, String password){mAccountModel.setAccount(username, password);mAccountView.setUsernameEdit(mAccountModel.getAccount().getmUsername());mAccountView.setPasswordEdit(mAccountModel.getAccount().getmPassword());} }
- IAccountView
public interface IAccountView {public void setUsernameEdit(String username);public void setPasswordEdit(String password); }
- MainActivity
public class MainActivity extends Activity implements IAccountView{private EditText mUsername;private EditText mPassword;private AccountPresenter mAccountPresenter;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);mUsername = (EditText) findViewById(R.id.username);mPassword = (EditText) findViewById(R.id.password);mAccountPresenter = new AccountPresenter(this);mAccountPresenter.initAccount("fredric", "fredricpassword");}@Overridepublic void setUsernameEdit(String username) {mUsername.setText(username);}@Overridepublic void setPasswordEdit(String password) {mPassword.setText(password);} }