1、 MVP模式的框架结构图
2、 代码包结构图
大致结构如下,其中根据需要增加其他的包,比如utils、widget等等;
3、 数据Bean类
数据实体类,存放对象的相关信息;
public classUserBean{
privateStringmFirstName;
privateStringmLastName;
publicUserBean(StringfirstName,String lastName){
this.mFirstName=firstName;
this.mLastName=lastName;
}
publicStringgetFirstName() {
returnmFirstName;
}
publicStringgetLastName() {
returnmLastName;
}
}
4、 Contract接口集合
将一个功能单元的接口集中放到Contract中,避免过多的文件;
public class UserContract { public interface IView { int getID(); String getFirstName(); String getLastName(); void setFirstName(String firstName); void setLastName(String lastName); } public interface IPresenter { void saveUser(int id, String firstName, String lastName); void loadUser(int id); } }
5、 Model模块
Model主要负责处理数据获取等业务逻辑,包括从本地以及网络进行数据的获取,然后提供给Presenter调度使用;
public class UserModel { public void setID(int id) { // 存储id } public void setFirstName(String firstName) { // 存储firstName } public void setLastName(String lastName) { // 存储lastName } public int getID() { // 获取id return 0; } public UserBean load(int id) { // 查数据库或者联网获取id的userbean return new UserBean("11", "22"); } }
6、 Presenter模块
Presenter是MVP架构中的主导器,通过接口操作View和Model,在MVC中Activity的大体逻辑都可以交由Presenter进行处理。
public class UserPresenter implements UserContract.IPresenter{ private UserContract.IView mUserView; private UserModel mUserModel; public UserPresenter(UserContract.IView view) { mUserView = view; mUserModel = new UserModel(); } @Override public void saveUser(int id, String firstName, String lastName) { mUserModel.setID(id); mUserModel.setFirstName(firstName); mUserModel.setLastName(lastName); } @Override public void loadUser(int id) { UserBean user = mUserModel.load(id); mUserView.setFirstName(user.getFirstName());// 通过调用IUserView的方法来更新显示 mUserView.setLastName(user.getLastName()); } }
7、 Activity等组件实现View接口
Activity主要负责实现View接口,并且触发相应的事件来执行Presenter中的行为,主要是用户的交互事件。
public class MainActivity extends Activity implements OnClickListener,UserContract.IView { UserContract.IPresenter mPresenter; EditText mId, mFirst, mLast; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); findViewById(R.id.save).setOnClickListener(this); findViewById(R.id.load).setOnClickListener(this); mId = (EditText) findViewById(R.id.id); mFirst = (EditText) findViewById(R.id.first); mLast = (EditText) findViewById(R.id.last); mPresenter = new UserPresenter(this); } @Override public void onClick(View v) { switch (v.getId()) { case R.id.save: mPresenter.saveUser(getID(), getFirstName(), getLastName()); break; case R.id.load: mPresenter.loadUser(getID()); break; default: break; } } @Override public int getID() { return new Integer(mId.getText().toString()); } @Override public String getFirstName() { return mFirst.getText().toString(); } @Override public String getLastName() { return mLast.getText().toString(); } @Override public void setFirstName(String firstName) { mFirst.setText(firstName); } @Override public void setLastName(String lastName) { mLast.setText(lastName); } }