每次看到别人的MVP模式,总感觉逼格很高,所以自己就尝试的看看学习下,不过好多都是模板的样式,而且看的时候感觉很深奥,但是弄了一个简单demo之后发现,其实TMD就是一群懒鬼想要让代码看起来舒服点,复用性高点而已,节约时间干其他的事,Holy shit,怪我年轻。(代码是从学习的demo中弄来的,要写也很简单,我很懒的···)
MVP:
M:model,分为2个。
一个是需要实现的方法Imodel,方法主要用于对UI界面数据的操作或者说渲染,或者说查询那些操作。
梨子:
public interfaceIUserModel {
void setID(int id);
void setFirstName(StringfirstName);
void setLastName(StringlastName);
UserBeanload(intid);
}
一个是实现类Model,把可能传进来的数据进行具体的操作:
public classUserModel implementsIUserModel {
private String mFristName;
private String mLastName;
private int mID;
privateSparseArray<UserBean> mUsererArray = newSparseArray<UserBean>();
@Override
public void setID(int id) {
mID = id;
}
@Override
public void setFirstName(StringfirstName) {
// TODO Auto-generated method stub
mFristName = firstName;
}
@Override
public void setLastName(StringlastName) {
mLastName = lastName;
UserBeanUserBean = newUserBean(mFristName,mLastName);
mUsererArray.append(mID, UserBean);
}
@Override
public UserBean load(int id) {
mID = id;
UserBeanuserBean = mUsererArray.get(mID, new UserBean("not found",
"not found"));
return userBean;
}
}
V:view,视图,与其说是视图,倒不如说是个接口类,主要用于实现里面的方法,它的作用很简单,把可能需要用的数据全部得到;
public interfaceIUserView {
int getID();
StringgetFristName();
StringgetLastName();
void setFirstName(StringfirstName);
void setLastName(StringlastName);
}
So,implementsIUserView之后只需要实现就可以了。
那么关键来了:
P:present,传说跟control一样的控制,对传进来的对象和数据进行操作:
public classUserPresent {
private IUserView mUserView;
private IUserModel mUserModel;
public UserPresent(IUserViewview) {
mUserView = view;
mUserModel = new UserModel();
}
public void saveUser(int id, String firstName,String lastName) {
mUserModel.setID(id);
mUserModel.setFirstName(firstName);
mUserModel.setLastName(lastName);
Log.d("YOU", "保存数据");
}
public void loadUser(int id) {
UserBeanuser = mUserModel.load(id);
mUserView.setFirstName(user.getFirstName());
mUserView.setLastName(user.getLastName());
Log.d("YOU", "加载数据");
}
}
关键点看到没有,初始化的时候传进来的IUserViewview,
还有UserModel的初始化。
明白了没?没明白?!没错,就是这样,UserModel只提供方法,其他的什么都不做,要做也是UserPresent来做,出事了别找Model!
而IUserView 用来干嘛的?就是在你数据被处理完了之后进行渲染或者设置数据用的。
Present里面就是传递一个需要处理的view,初始化方法类model,然后在里面提供方法,用model加工传进来的数据或者提供方法将数据设置给view。
那么present在哪里初始化,有怎么做呢
@Override
protected void onCreate(BundlesavedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mUserPresenter = new UserPresent(this);
··········
}
就这么简单。
MVP,方法归方法(M),UI归UI(V),P只是一个操作者,因为用户实在UI界面进行事件的操作,所以P要在UI活动界面中初始化,然后将需要处理的V对象传入到P对象内部,而P对象内部新建或者说初始化M对象,P对象在V中通过自定义方法,将需要的数据传入进来,然后内部方法中会就将数据通过M处理好之后,交给V去设置或者显示。