MVP即Model—View—Presenter,从经典的设计模式MVC演变而来,它们的基本思想有相通的地方:Controller/Presenter负责逻辑的处理,Model提供数据,View负责显示。MVP架构的重点在于面向接口编程,通过接口将单一职能的Model 和 View联系起来
说起来容易做起来难,如何才能使用一个MVP架构呢?
1、Model对外暴露的接口:interface IGirlModel
public interface IGirlModel {
void loadGirl(OnGirlLoadCompleter onGirlLoadCompleter);
interface OnGirlLoadCompleter{
void onCompleter(List<Girl> girlList);
}
}
View对外暴露的接口:interface IGirlView
public interface IGirlView {
void showProgress();
void showGirl(List<Girl> girlList);
}
Presenter业务逻辑控制类,持有Model和View的引用,否则如何关联?
public class IGirlPresenter {
//View Interface
IGirlModel iGirlModel = new GirlModelImpl();
//Model Interface
IGirlView iGirlView;
public IGirlPresenter(IGirlView iGirlView){
super();
this.iGirlView =iGirlView;
}
2、创建IGirlModel的实现类IGirlModelImpl
public class GirlModelImpl implements IGirlModel {
@Override
public void loadGirl(OnGirlLoadCompleter onGirlLoadCompleter) {
加载数据
}
}
}
在Activity中实现IGirlView接口
public class MainActivity extends Activity implements IGirlView{
private ListView listView;
private MyAdapter myAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.content_main);
listView = (ListView) findViewById(R.id.listView);
myAdapter = new MyAdapter(this);
listView.setAdapter(myAdapter);
}
@Override
public void showProgress() {
}
@Override
public void showGirl(List<Girl> girlList) {
myAdapter.setData(girlList);
}
}
3、在IPresenter中定义一个方法将IGirModel和IGirlView关联起来
public void fetch(){
if(iGirlView!=null){
iGirlView.showProgress();
iGirlModel.loadGirl(new IGirlModel.OnGirlLoadCompleter() {
@Override
public void onCompleter(List<Girl> girlList) {
iGirlView.showGirl(girlList);
}
});
}
}
4、在IGirlView的实现类中调用Ipresenter中关联的方法,将IGirlModel中接口请求回来通过接口暴露出的数据在IGirView实现类中展示
new IGirlPresenter(this).fetch();
如此我们便做到了IGirlModel请求数据,通过接口向外暴露,IGirlView展示数据,IPresenter持有二者的引用,将二者联系起来。这就是一个简单的MVP架构设计,是不是很简单啊,赶紧去学习吧!